【问题标题】:Ruby / Rails - AJAX pagination of nested resources - How do I determine the parent resource?Ruby / Rails - 嵌套资源的 AJAX 分页 - 如何确定父资源?
【发布时间】:2011-09-04 22:54:09
【问题描述】:

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

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

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

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

两个 URL 都在执行 Comments 控制器的索引操作。

我的问题是:在index 操作中,我如何确定提供的{:id}user_id 还是post_id,以便检索所需的cmets。

【问题讨论】:

  • 例如,您可以在 request.env["HTTP_REFERRER"] 上使用正则表达式进行检查。如果有用户匹配,则:id 属于用户,反之亦然

标签: ruby-on-rails ruby-on-rails-3 routing pagination nested-resources


【解决方案1】:

在您的 Comments 控制器中检查 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

【讨论】:

  • 这些父资源 ID 不存在,或者这在 Rails 4 中似乎不正确,至少在我构建的应用程序中。
【解决方案2】:

我喜欢瑞恩贝茨的方式

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

【讨论】:

    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多