评论显示路径

时间:2014-03-23 19:54:15

标签: ruby-on-rails ruby

以下是我在评论控制器中的内容:

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])

1 个答案:

答案 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)