2011-02-26 138 views
2

我遇到了麻烦的路线,我不想筑巢。Rails 3路线范围和/或嵌套

我有以下途径:

resources :foos 
    resources :bars 
    resources :bazs do 
    resources :hellos 
    resources :worlds 
    end 

的富,酒吧和巴兹车型都belong_to用户模型。我不想嵌套另一层,但我希望在我的url中有一个与用户的永久链接属性相对应的前缀(类似于每个由用户名前缀的每个github回购)。所以,我过滤器前有我所有的控制器

def get_scope 
    @user = User.find_by_permalink(params[:permalink]) 
    end 

修改to_param感谢@cowboycoded

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之类的网址显示为用户/永久链接而不是用户/ 1。我试图在我的作用域中使用这个:id,但它与foo的:id参数冲突并且破坏了所有内容。也许有一个连接到我失踪的路径?

感谢您的任何建议,您可能有!

+0

合并路径助手解决方案和to_param方法。 – 2011-02-27 21:24:38

回答

3

您是否尝试过在模型中使用to_param方法?这将允许您覆盖默认的,而且使用的ID以外的东西,并会与网址助手从文档

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) # => "https://stackoverflow.com/users/Phusion" 

我不知道有多好这因为我没有尝试过,所以我觉得它值得一试。