【问题标题】:Nesting the same resource in multiple locations in routes将同一资源嵌套在路线中的多个位置
【发布时间】:2012-09-19 10:49:57
【问题描述】:

因此,我和之前的许多人一样,在我的应用中引入了“喜欢”项目的概念。有许多不同类型的资源可以被喜欢(帖子、回复、列表、操作等),我正在寻找构建路由文件的最佳方式。

这可能涉及制作一个如下所示的 routes.rb 文件:

resources lists do
  resources posts do
    resources replies do
      resources likes
    end
    resources likes
  end
  resources likes
end

还有一个不知道 load_and_authorize 意味着什么的 LikesController:

class LikesController < ActionController:Base

  load_and_authorize :list # only works if list_id exists in this request
  load_and_authorize :post, through: :list # only works if post_id exists in this request

  # and so on...

end

有没有更好的方法来做到这一点?我曾想过只有一个 /likes 路径来发布所有内容,但这意味着我不能使用 load_and_authorize,也意味着更难以明智地为给定列表、帖子、回复等执行 Likes#index 之类的事情。

谢谢。

【问题讨论】:

  • 这是一个非常有用的问题 - 很想知道答案

标签: ruby-on-rails rails-routing


【解决方案1】:

不要在其他资源中嵌套喜欢,试试这个:

scope "/lists/:list_id(/posts/:post_id(/replies/:reply_id))" do
  resources :likes
end

我相信这应该会为您提供一组 LikesController 路由,这些路由需要 :list_id 参数,并且可以选择采用 :post_id:reply_id。 url 非常难看,但我只是想匹配四重嵌套 rails 资源路由的默认值。我建议清理一下。

编辑:看起来这还需要在您的 LikesController 中添加一些额外的逻辑——比如 before_filter 检测您拥有哪些参数并仅加载和授权这些对象。但这对我来说似乎是一个可以解决的问题?

【讨论】:

    猜你喜欢
    • 2013-01-01
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多