【发布时间】:2011-02-26 04:12:06
【问题描述】:
我在确定不想嵌套的路由范围时遇到问题。
我有以下路线:
resources :foos
resources :bars
resources :bazs do
resources :hellos
resources :worlds
end
foo、bar 和 baz 模型都属于一个用户模型。我不想嵌套另一层,但我确实希望在我的 url 中有一个与用户的永久链接属性相对应的前缀(类似于以用户名为前缀的每个 github 存储库)。所以我在所有控制器上都有一个前置过滤器
def get_scope
@user = User.find_by_permalink(params[:permalink])
end
感谢@cowboycoded 修改了to_param
class User < ActiveRecord::Base
def to_param
permalink
end
end
我用
包裹了这些路线 scope ":permalink", :as => :user do
#nested routes here
end
只要我将@user 传递给每个非索引路由,现在一切正常。回到我的所有视图并在已经确定范围时将 (@foo) 替换为 (@user, @foo) 似乎并不是很枯燥。
除非我弄错了,否则 to_param 方法只是替换 :id 以便 /users/:id 等 URL 显示为 users/permalink 而不是 users/1。我试图在我的范围内使用这个 :id ,但它与 foo 的 :id 参数冲突并破坏了一切。也许与我缺少的路径有联系?
感谢您提出的任何建议!
【问题讨论】:
-
结合了路径辅助解决方案和 to_param 方法。
标签: ruby-on-rails-3 routing scope nested permalinks