2015-06-21 26 views
0

我想在Rails 4中製作應用程序。Rails 4&Controller動作

我有三個模型 - Project,Scope和Finalize。

的關聯是:

項目有一個範圍 範圍屬於項目,他有一個敲定 敲定屬於範圍

範圍接受嵌套屬性來最終確定。

在最終確定,我有一個名爲屬性:草案(布爾),並稱爲屬性:finalised_at(日期時間)

我試着寫它可以讓我把一個鏈接上的任何項目,創建了一個功能:草案保存爲真。該鏈接旨在將草稿切換爲false,然後在已完成的項目上顯示發佈日期(:finalised_at)。

我收到一個錯誤,它阻止了我創建一個測試項目。錯誤是:未定義的局部變量或方法`create_a_finalise' - 引用我的項目控制器中的創建操作。我認爲這與我的scope.rb模型中的create_a_finalise方法有關。我不知道如何解決這個問題。

我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 

任何人都可以看到我需要做什麼才能創建一個新項目。我的項目控制器中的創建操作有問題。

謝謝

回答

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