我无法确定我不想筑巢的路线。
我有以下路线:
resources :foos
resources :bars
resources :bazs do
resources :hellos
resources :worlds
end
foo,bar和baz模型都属于用户模型。我不想嵌套另一个图层,但我确实希望在我的网址中有一个前缀,该前缀对应于用户的永久链接属性(类似于每个以用户名为前缀的github repo)。所以我在所有控制器上都有一个过滤器
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传递给每个非索引路由。当它已经是作用域时,必须回到我的所有视图并用(@ user,@ foo)替换(@foo)并不是非常干燥。
除非我弄错了,否则to_param方法只是替换:id,以便/ users /:id等网址显示为users / permalink而不是users / 1。我尝试使用这个:我的范围内的id,但它与foo&#39; s param冲突并且打破了一切。也许我错过了与路径的联系?
感谢您提出的任何建议!
答案 0 :(得分:3)
您是否尝试在模型中使用to_param方法?这将允许您覆盖默认值并使用除id之外的其他内容,并将使用URL帮助程序
http://api.rubyonrails.org/classes/ActiveRecord/Base.html#method-i-to_param
文档示例:
class User < ActiveRecord::Base
def to_param # overridden
name
end
end
user = User.find_by_name('Phusion')
user_path(user) # => "/users/Phusion"
我不确定这与范围有多好,因为我没有尝试过,但我想它值得一试。