2013-04-16 27 views
0

我正在研究一個應用程序,允許用戶評論一個單一的「工作」(思考博客文章)。在該模型的關聯如下:多個外鍵的Rails的記錄 - 未知的行動

class User < ActiveRecord::Base 
    has_many :works 
    has_many :comments 

class Work < ActiveRecord::Base 
    belongs_to :user 
    has_many :comments 


class Comment < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :post 
    belongs_to :work 

在意見表中,記錄有以下字段:

ID 內容
USER_ID
created_at
的updated_at
work_id

在我的評論控制器中,我有以下創建操作:

def create 
    @work = Work.find(params[:id]) 
    @comment = @work.comments.create(params[:comment]) 
    @comment.user = current_user 
    if @comment.save 
     #flash[:success] = "Post created!" 
     redirect_to root_url 
    else 
     render 'activities' 
    end 
    end 

我想要的用戶和工作的意見交往,但我得到了以下錯誤消息時,我嘗試創建一個註釋:

Unknown action 

The action 'update' could not be found for CommentsController 

我試圖使用以下StackOverflow的答案爲導向,但解決的辦法是不是爲我工作: Multiple Foreign Keys for a Single Record in Rails 3?

編輯: 我對作品展#動作的附加註釋的形式:

def show 
    @work = Work.find(params[:id]) 
    @comment = current_user.comments.create(params[:comment]) 
    @activities = PublicActivity::Activity.order("created_at DESC").where(trackable_type: "Work", trackable_id: @work).all 
    @comments = @work.comments.order("created_at DESC").where(work_id: @work).all 
    respond_to do |format| 
     format.html # show.html.erb 
     format.xml { render :xml => @work } 
    end 
    end 

評論表單本身:

<%= form_for(@comment) do |f| %> 
    <%= render 'shared/error_messages', object: f.object %> 
    <div class="field"> 
    <%= f.text_area :content, placeholder: "Post a comment!" %> 
    </div> 
    <%= f.submit "Post", class: "btn btn-small btn-primary" %> 
<% end %> 

我也有評論控制器上的更新方法:

def update 
    @comment = current_user.comments.find(params[:id]) 
    if @comment.update_attributes(params[:comment]) 
     flash[:success] = "Comment updated" 
     redirect_to @comment 
    end 
    end 
+0

請注意,您要保存記錄兩次。 '@comment = @ work.comments.create(params [:comment])'嘗試保存記錄,並且您用'@ comment.save'再次保存*。你應該使用'@comment = @ work.comments.new(params [:comment])' – meagar

回答

0

錯誤消息說:

The action 'update' could not be found for CommentsController 

所以,問題在於你的表單試圖調用一個update actio在CommentsController上。這與將UserWork實例作爲外鍵添加無關。你的代碼似乎是正確的。

+0

嗯..我只是編輯我的帖子,包括更多的信息。是否可以在工作#展示頁上添加評論表單?我的代碼一定是不對的。 – winston

+0

問題出在你的'form_for(@comment)'上。因此,如果評論尚未保存,這位整潔的小助手會將您的表單提交給「創建」操作,但如果評論已被保存,則將其更新爲「更新」操作。我的直覺是,如果你在數據庫中查看,你會在那裏看到一個註釋行,表單正在嘗試更新該記錄,但無法找到更新操作。 –

+0

你說得對。數據庫充滿了空白記錄。表單創建行,但之後不做任何事情。我應該在評論表格上更改什麼? – winston

0

可以肯定的,如果你堅持下去的show動作時對數據庫的註釋:

@comment = current_user.comments.create(params[:comment]) 

然後形式助手將建立一個更新的形式,而不是創建表單(因爲模型已存在):

<%= form_for(@comment) do |f| %> 

如果期望動作是要發表評論,從展會網頁創建,然後嘗試build在表演動作荷蘭國際集團的評論:

@comment = current_user.comments.build(params[:comment]) 
+0

感謝您的回覆。我更改了要構建的代碼,但現在錯誤消息指出它無法找到CommentsController的創建操作 – winston