Ruby / Rails - 嵌套资源的 AJAX 分页 - 如何确定父资源?

发布于 2024-11-11 17:47:51 字数 651 浏览 6 评论 0原文

我的模型有帖子用户评论。用户可以对帖子发表评论。 每条评论都属于一个用户和一个帖子。 因此,Comment 模型有一个 user_id 字段和一个 post_id 字段。

查看帖子时,我想对该帖子的评论进行分页。
查看用户时,我想对该用户的评论进行分页。
我想使用 AJAX 进行分页(通过 Kaminari gem)。

我为两者都设置了嵌套路线。

在帖子上,被点击的 URL 是 http://localhost:3000/posts/{:id}/comments?page={page_number}
在用户上,被点击的 URL 是 http://localhost:3000/users/{:id}/comments?page={page_number}

两个 URL 都点击了评论控制器。

我的问题是:在 index 操作中,如何确定提供的 {:id}user_id 还是 post_id 这样我就可以检索所需的评论。

My model has Posts, Users, and Comments. Users can leave Comments on/about Posts.
Every Comment belongs to a User and a Post.
Therefore, the Comment model has a user_id field and a post_id field.

When viewing a Post, I want to paginate through that Post's comments.
When viewing a User, I want to paginate through that User's comments.
I want to paginate using AJAX (via the Kaminari gem).

I have my nested routes set up for both.

On the Post, the URL being hit is http://localhost:3000/posts/{:id}/comments?page={page_number}
On the User, the URL being hit is http://localhost:3000/users/{:id}/comments?page={page_number}

Both URLs are hitting the index action of the Comments controller.

My question is this: inside the index action, how do I determine if the {:id} provided is a user_id or a post_id so I can retrieve the desired comments.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

北音执念 2024-11-18 17:47:51

检查评论控制器中的 params[:user_id]params[:post_id]

if params[:user_id]
  #call came from /users/ url
elsif params[:post_id]
  #call came from /posts/ url
else
  #call came from some other url
end

Check for params[:user_id] and params[:post_id] in your Comments controller:

if params[:user_id]
  #call came from /users/ url
elsif params[:post_id]
  #call came from /posts/ url
else
  #call came from some other url
end
℡Ms空城旧梦 2024-11-18 17:47:51

我喜欢瑞安·贝茨的方式

class CommentsController
  before_action :load_commentable

  def index
    @comments = @commentable.comments.page(params[:page])
  end

  private

    def load_commentable
      klass = [Post, User].detect { |c| params["#{c.name.underscore}_id"] }
      @commentable = klass.find(params["#{klass.name.underscore}_id"])
    end
end

I like the Ryan Bates' way

class CommentsController
  before_action :load_commentable

  def index
    @comments = @commentable.comments.page(params[:page])
  end

  private

    def load_commentable
      klass = [Post, User].detect { |c| params["#{c.name.underscore}_id"] }
      @commentable = klass.find(params["#{klass.name.underscore}_id"])
    end
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文