Rails:在模型中查找正确的项目

时间:2012-11-21 08:02:20

标签: ruby-on-rails hash social-media-like

问题:寻找属于帖子的正确评论

我正在尝试实现一个“喜欢”的功能(就像在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>

3 个答案:

答案 0 :(得分:1)

像这样称呼它

<%= link_to 'like', like_post_comment_path(@post, comment) %>

其中@post是当前的帖子对象

答案 1 :(得分:1)

替换您的链接
<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

答案 2 :(得分:0)

这样:

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