2015-06-21 10 views
0

Я пытаюсь сделать приложение в Rails 4.Rails 4 & Controller action

У меня есть три модели - Project, Scope и Finalize.

Ассоциации является:

Проект имеет одну области Области принадлежит к проекту и имеет один завершить Доработка принадлежит Scope

Области принимает вложенные атрибуты для Finalize.

В Finalize, у меня есть атрибут: проект (булево) и атрибут: finalised_at (DateTime)

Я попытался написать функцию, которая позволит мне поставить ссылку на любой проект, созданный с: проект сохранен как истинный. Ссылка предназначена для переключения: черновик в false, который затем отображает дату публикации (: finalised_at) для завершенных проектов.

Я получаю сообщение об ошибке, которое мешает мне создать тестовый проект. Ошибка: неопределенная локальная переменная или метод `create_a_finalise 'for - ссылка на действие create в моем контроллере проекта. Я думаю, что это имеет какое-то отношение к методу create_a_finalise, находящемуся в моей модели scope.rb. Я не знаю, как это исправить.

Мой finalise.rb имеет:

after_validation :set_publish_time 
    def set_publish_time 
    self.finalised_at = Time.now unless self.draft 
    end 

Мой scope.rb имеет:

after_create :create_a_finalise 
    def create_a_finalise_dynamic(boolean) 
    self.finalise.create draft: boolean 
    end 

Мой finalise_controller имеет:

def toggle_draft 
    @finalise = Finalise.find(params[:finalise_id]) 
    @finalise.draft = false 

    if @finalise.save 
     redirect_to project_path(@finalise.scope.project), notice: 'Successfully Updated' 
    else 
     redirect_to project_path(@finalise.scope.project), alert: 'Not Updated' 
    end 
    end 

Проблемная часть моего project_controller имеет:

def create 
    #authorise @project 
    @project = Project.new(project_params) 
    @project.creator_id = current_user.id 
    @project.users << current_user 
    respond_to do |format| 
     if @project.save 
     format.html { redirect_to @project } 
     format.json { render action: 'show', status: :created, location: @project } 
     else 
     format.html { render action: 'new' } 
     format.json { render json: @project.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

Может ли кто-нибудь увидеть, что мне нужно сделать, чтобы создать новый проект. Что-то не так с действием create в моем контроллере проектов.

Спасибо

ответ

0

Вы имеете в виду create_a_finalise, но она называется create_a_finalise_dynamic.

after_create :create_a_finalise 
    def create_a_finalise_dynamic 

Изменить имя метода

def create_a_finalise 

и оставить от аргумента.

+0

Привет Хлоя, я попытался это, но тогда имеет ошибку с помощью метода: неопределенную локальную переменную или метод 'булево» для # <Масштаб: 0x0000010dad0ee0> – Mel

+0

Ну ты также нужно удалить аргумент из '# create'! 'self.finalise.create draft: boolean'. Установите его в твердое кодированное значение, например 'true'. – Chloe

+0

У меня нет ничего в моем контроллере финализации, создайте для этого действие. Не уверен, что вы имеете в виду – Mel

0

Отдайте после

пытаясь угадать
# scope.rb 

after_create :create_a_finalise 
def create_a_finalise(val) 
    self.create_finalise(draft: val) 
end 
Смежные вопросы