将相同资源嵌套在路径中的多个位置

时间:2012-09-19 10:49:58

标签: ruby-on-rails rails-routing

所以,就像我之前的许多人一样,在我的应用程序中引入“喜欢”项目的概念。可以使用许多不同类型的资源(帖子,回复,列表,操作等),我正在寻找构建路由文件的最佳方法。

这可能涉及制作类似于:

的routes.rb文件
resources lists do
  resources posts do
    resources replies do
      resources likes
    end
    resources likes
  end
  resources likes
end

和LikesController,它不知道它是什么意思是load_and_authorize - ing:

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

有没有更好的方法呢?我曾想过只有一个/喜欢的路径,所有内容都会发布,但这意味着我不能使用load_and_authorize,这也意味着更难理智地做一些事情,如Likes#index给定列表,发布,回复等。

感谢。

1 个答案:

答案 0 :(得分:0)

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

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

我认为应该为您提供一组LikesController路线,这些路线需要:list_id参数,并且可选择:post_id:reply_id。该网址相当丑陋,但我只是尝试匹配四重嵌套的rails资源路由的默认值。我建议稍微清理一下。

编辑:看起来这还需要你的LikesController中的一些额外逻辑 - 就像before_filter一样,它可以检测你得到了哪些参数,并且只对那些对象进行load_and_authorizes。但这对我来说似乎是一个可以解决的问题?