2011-02-26 167 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" 

我不知道有多好這因爲我沒有嘗試過,所以我覺得它值得一試。