我正在开发一款允许用户评论单个“工作”的应用(想想博客文章)。模型中的关联如下:
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?
修改 我在作品#show action:
上添加了评论表单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 :(得分:0)
错误消息显示:
The action 'update' could not be found for CommentsController
因此,问题是您的表单试图在update
上调用CommentsController
操作。这与将User
和Work
实例添加为外键无关。你的代码似乎是正确的。
答案 1 :(得分:0)
确保在show
操作期间将注释持久保存到数据库中:
@comment = current_user.comments.create(params[:comment])
然后表单助手将构建更新表单而不是创建表单(因为模型已经存在):
<%= form_for(@comment) do |f| %>
如果所需操作是从显示页面发布评论创建,请尝试build
显示操作中的评论:
@comment = current_user.comments.build(params[:comment])