2013-05-01 94 views
0

我目前在rails中使用friendly_id gem,並注意到如果有人將一個帖子命名爲「About」,它會覆蓋我已經分配給我的routes.rb中的靜態頁面的/ about路徑文件。friendly_id和routes.rb - rails

這是我當前的代碼:

extend FriendlyId 
    friendly_id :title, use: :history 

如果有相同名稱之前的帖子...它增加了一個--2。但friendly_id似乎忽略了我的routes.rb中的靜態路由。

有沒有辦法讓friendly_id識別並且不覆蓋這些路線?

謝謝

+0

我添加了一個答案,但它會有助於查看您的'routes.rb'文件的相關行。 – 2013-05-01 19:16:08

回答

4

FriendlyID包括保留模塊,其防止提供單詞的列表被用作友好蛞蝓。您可以將您的靜態路由添加到保留字數組中,以防止某人覆蓋您的路由。

從FriendlyId RDocs

FriendlyId.defaults do |config| 
    config.use :reserved 
    # Reserve words for English and Spanish URLs 
    config.reserved_words = %w(new edit nueva nuevo editar) 
end 

如果您仍然希望允許其保留你就可以說FriendlyId會用蛞蝓的新方法標題。來自RDocs的這篇文章解釋說,


列或方法?

FriendlyId始終使用方法作爲slug文本的基礎 - 不是列。乍一看,這可能聽起來很混亂,但請記住Active Record爲模型關聯表中的每個列提供方法,這就是FriendlyId使用的方法。

這是一個使用一個自定義的方法來生成蛞蝓類的例子:

class Person < ActiveRecord::Base 
    friendly_id :name_and_location 
    def name_and_location 
    "#{name} from #{location}" 
    end 
end 

bob = Person.create! :name => "Bob Smith", :location => "New York City" 
bob.friendly_id #=> "bob-smith-from-new-york-city" 

您可以創建一個方法類似:title_with_id:title_with_rand。這取決於你,以及你想如何看待slu gs。

您還需要確保您的routes.rb已將您的靜態路由列在友好標識的路由之前。第一個路由調度程序匹配的是請求將被處理的地方。

+0

這有效......但不是創建一個新的friendly_id,就像-2,它只是返回一個錯誤,說「Friendly_id保留。」然後您必須手動重命名帖子。有沒有辦法讓它繼續以同樣的方式進行:歷史呢? – user749798 2013-05-01 19:26:45