我试图在我的收藏展示页面上发表评论表。我对Rails有点生疏,我不知道为什么这个表单没有尝试创建评论而是返回错误
动作'更新'找不到CommentsController
评论系统在控制台中运行。
这是我的表格
<%= form_for [@commentable, @comment] do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= f.text_area :content %>
<%= f.submit "Comment", class: "btn btn-large btn" %>
<% end %>
我的评论模型
class Comment < ActiveRecord::Base
belongs_to :commentable, polymorphic: true
belongs_to :user
end
我的收藏模型
class Collection < ActiveRecord::Base
has_many :comments, as: :commentable
end
我的comments_controller
class CommentsController < ApplicationController
def create
@comment = @commentable.comments.new(comment_params)
if @comment.save
flash[:success] = 'Comment posted!'
redirect_to @commentable
else
flash[:notice] = "Error creating comment: #{@comment.errors}"
redirect_to @commentable
end
end
private
def comment_params
params.require(:comment).permit(:content, :commentable_type, :commentable_id, :user_id)
end
end
我的collections_controller显示操作
def show
@collection = Collection.find(params[:id])
@commentable = @collection
@comments = @commentable.comments
@comment = Comment.new if user_signed_in?
end
答案 0 :(得分:1)
您未在表单或控制器中使用@commentable,这可能会导致您的问题:
<%= form_for [@commentable, @comment] do |f| %>
您的控制器操作应如下所示:
def create
@comment = @commentable.comments.new(comment_params)
更新:然后根据资源加载可评论:
before_filter: load_commentable
def load_commentable
resource, id = request.path.split('/')[1, 2]
@commentable = resource.singularize.classify.constantize.find(id)
end
方法由Ryan Bates提供:http://railscasts.com/episodes/154-polymorphic-association-revised
答案 1 :(得分:1)
您能否显示呈现该表单的控制器操作?我认为问题是@comment
已经被持久化/创建,因此它会尝试更新它。
更新:
我刚注意到你的表演动作。是的问题是@comment
已经存在。只需将其更改为:
@comment = Comment.new if user_signed_in?