以下是我在评论控制器中的内容:
def show
@comment = Comment.find(params[:id])
end
private
def find_commentable
params[:commentable_type].constantize.find(params[:commentable_id])
end
在我的用户控制器中:
def show
@user = User.find_by_username(params[:id])
@comments = @user.comments.find(:all, :order => "id desc", :limit => 20)
end
在我的用户节目中:
<% @comments.each do |comment| %>
<%= truncate(comment.body, length: 100) %>
<%= link_to "Expand comment", post_comments_path(comment) %>
<% end %>
点击链接时出现此错误:
undefined method `constantize' for nil:NilClass
这些是突出显示的行:
def find_commentable
params[:commentable_type].constantize.find(params[:commentable_id])
end
我被带到的网址是:
/15/comments
当我需要去:
/2/comments/15
2是帖子ID,15是评论ID。我该如何工作?
评论路径:
post_comment GET /:post_id/comments/:id(.:format) comments#show
@commentable = find_commentable
@comment = @commentable.comments.build(params[:comment])
答案 0 :(得分:1)
你的问题在这里:
<%= link_to "Expand comment", post_comments_path(comment) %>
查看您的rake routes
并查看其使用的实际参数。你可以像这样传递它们:
post_comments_path(post_id: post_id, id: comment_id)
或者另一种方式是使用订单
post_comments_path(post_id, comment_id)
然后在你的控制器中你应该使用这些id:
@post = Post.find(params[:post_id])
@comment = @post.comments.find(params[:id])
由于您只想要评论并且您拥有其ID,因此您可以忽略帖子ID并在控制器中执行此操作:
@comment = Comment.find(params[:id])
然后像这样称呼它:
post_comment_path(id: comment.id, post_id: 0)