2013-05-01 83 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