FriendlyID不构建HTML转义slu

我有正确的friendly_id设置,一切正常,使用slugs。

我遇到的问题是我的Tag模型上的一些名称(这是FriendlyId附加到的模型)需要进行HTML转义。

名称如c++.net

当我运行Tag.find_each(:&save) ,它为我生成了所有的Tag.find_each(:&save) ….但是在那些带有这些名称的标签上,这就是发生的事情:

 > c = Tag.where(:name => "c++") Tag Load (0.9ms) SELECT "tags".* FROM "tags" WHERE "tags"."name" = 'c++' => [#] > Tag.where(:name => ".net") Tag Load (0.9ms) SELECT "tags".* FROM "tags" WHERE "tags"."name" = '.net' => [#] 1.9.3p392 :012 > Tag.where(:name => "c#") Tag Load (1.0ms) SELECT "tags".* FROM "tags" WHERE "tags"."name" = 'c#' => [#] 

注意每个上面的slu – 以及它们如何与每个记录的name不正确对应。

我该如何解决?

friendly_id(至少当你用它来调用它时:use => :slugged )试图“清理”字段值,以便它在URL中看起来不错。 如果要更改该行为,可以覆盖normalize_friendly_id 。 如果你这样做,你需要确保对你的slug进行URL编码,因为像#这样的东西在URL中已经有了特殊含义。

对于后来遇到此问题的人来说,工作解决方案是避免使用friendly_id :use_slugged ,而只是使用标签的原始名称并让它们自动由Rails的链接助手转义。 对于“.net”标记,它还要求将路由更改为resources :tags, :constraints => { :id => /.*/ }以防止Rails将点解释为路径分隔符。