2010-08-21 49 views
0

這可能是一件容易完成的事情,但我很難清楚地說清楚,導致我得到各種各樣的半精靈,但並不完全符合我的要求SO搜索時張貼。redirect_to對象記錄帶有ID屬性旁邊的字段

我有一個資源,我們將使用User作爲一個簡單的討論用例。我希望搜索引擎優化友好的URL,所以而不是〜/ users /:id,我們有〜/ users /:名稱,其中我的用戶控制器上的顯示操作正在執行User.find_by_name(:name)。很棒。

在應用程序的各個部分,我想將最終用戶重定向回我的資源。該文檔似乎表明我應該做的

redirect_to @user, :notice => "your page is now DIAMONDS!"'

這裏的問題是,這個自動出現使用:值的資源,這是不是我後ID。我想知道是否有一種方法可以在我的路由文件中定義一個路由,它知道我想要使用name屬性 - 然後重定向到生成的route_url助手。但我不知道該怎麼做。

在此期間,我訴諸這樣的:

flash[:notice] = "Your account is now DIAMONDS. *fist bump*" 
redirect_to :action => :show , :id => @user.name 

這是不理想的我,因爲它是重複的代碼好一點(我有很多UI元素將被鏈接回我的資源),因爲我似乎無法弄清楚如何將flash作爲redirect_to方法調用的一部分---每一個在redirect_to中包含閃光炸彈的捲曲支撐組合。

我不認爲這是我的問題具體的germaine,但我在Rails 3上這樣做,以防它對我提供的選項有一些含義。

對不起noobishness :)

回答

2

很容易做到。這樣做的standardish方法是:

/app/models/user.rb

def to_param 
    "#{id}-#{name}" 
end 

這很好,併爲您提供更好的搜索引擎優化 - http://yoursite.com/users/1345-supercool ....你可以調整有點刪除 '1345':

/app/models/user.rb

# add_column :permalink, :string 
    attr_protected :permalink 
    before_create :set_permalink 
    validates_uniqueness_of :permalink 

    def set_permalink 
    self.permalink = username.parameterize 
    end 

    def to_param 
    permalink 
    end 

氏s會給你http://yoursite.com/users/supercool,並且會成爲一個永久性的URL,所以如果用戶以後改變他們的用戶名,URL將保持不變,並保持搜索引擎的快樂。

+0

url設計有點超出我的管轄範圍,但如果我要去這個設計或堅持我的,我仍然沒有想辦法生成所需模式的鏈接,因爲生成的路由助手(例如my_resource_path | url)都假定ID字段 - 與執行諸如redirect_to @resource – bakasan 2010-08-21 23:26:52

+0

之類的操作相同,請參閱http://api.rubyonrails.org/classes/ActiveRecord/Base.html#M001840以獲取to_param的api解釋。這是魔法。 :) – DGM 2010-08-22 00:50:21

+0

奇怪的是,它現在不適合我。 :( – DGM 2010-08-22 00:56:58

相關問題