私は、ユーザーが単一の「作品」にコメントできるアプリに取り組んでいます (ブログ投稿を考えてください)。モデル内の関連付けは次のとおりです。
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 content
user_id
created_at
updated_at
work_id
コメント コントローラーには、次の Create アクションがあります。
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 の回答をガイドとして使用しようとしていますが、解決策がうまくいきません: Rails 3 の単一レコードの複数の外部キー?
編集: 私はworks#showアクションにコメントフォームを追加しています:
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