我正在研究一個應用程序,允許用戶評論一個單一的「工作」(思考博客文章)。在該模型的關聯如下:多個外鍵的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
請注意,您要保存記錄兩次。 '@comment = @ work.comments.create(params [:comment])'嘗試保存記錄,並且您用'@ comment.save'再次保存*。你應該使用'@comment = @ work.comments.new(params [:comment])' – meagar