问题:寻找属于帖子的正确评论
我正在尝试实现一个“喜欢”的功能(就像在facebook上一样)来对特定帖子发表评论。我已经为我的帖子实现了相同的功能,但“指向正确的评论”给了我很多时间。为了澄清,我的“喜欢”函数导致以下GET调用:
http://localhost:3000/posts/11/comments/4/like
但它实际上应该打电话
/posts/4/comments/11/like
我检查了我的路线,这似乎对我来说
like_post_comment GET /posts/:post_id/comments/:id/like(.:format)
所以我猜问题出在控制器上。
在comments_controller中我喜欢的动作开头,我有
def like
@post = Post.find(params[:post_id])
@comment = @post.comments.find(params[:comment])
我认为这一定是错的,但我不确定为什么或如何解决它。其他操作以类似的方式设置局部变量@post和@comment,但它们正确地完成了工作。
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.create(params[:comment])
def destroy
@post = Post.find(params[:post_id])
@comment = @post.comments.find(params[:comment])
如何呈现我的评论链接
<td><b><%= link_to 'like', like_post_comment_path(comment) %></b></td>
替换您的链接
<td><b><%= link_to 'like', like_post_comment_path(comment) %></b></td>
至
<td><b><%= link_to 'like', like_post_comment_path(@post, comment) %></b></td>
并在控制器中替换你喜欢的动作
def like
@post = Post.find(params[:post_id])
@comment = @post.comments.find(params[:id])
# ...
end
这样称呼它
<%= link_to 'like', like_post_comment_path(@post, comment) %>
其中@post是当前的post对象
这个:
/posts/:post_id/comments/:id/like(.:format)
告诉我你的帖子是由post_id param标识的,你的评论是由id param标识的。因此,你喜欢的方法应如下所示:
def like
@post = Post.find(params[:post_id])
@comment = @post.comments.find(params[:id])