FriendlyID不构建HTML转义slu

时间:2013-03-29 16:51:07

标签: ruby-on-rails friendly-url friendly-id

我已正确设置friendly_id并且一切正常,使用slu ..

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

c++.net等名称。

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

> c = Tag.where(:name => "c++")
  Tag Load (0.9ms)  SELECT "tags".* FROM "tags" WHERE "tags"."name" = 'c++'
 => [#<Tag id: 2, name: "c++", num_questions: 187598, created_at: "2013-03-23 07:02:09", updated_at: "2013-03-29 15:34:09", questions_count: 87, slug: "c">] 
> Tag.where(:name => ".net")
  Tag Load (0.9ms)  SELECT "tags".* FROM "tags" WHERE "tags"."name" = '.net'
 => [#<Tag id: 142, name: ".net", num_questions: 149074, created_at: "2013-03-23 07:09:47", updated_at: "2013-03-29 15:34:10", questions_count: 85, slug: "net">] 
1.9.3p392 :012 > Tag.where(:name => "c#")
  Tag Load (1.0ms)  SELECT "tags".* FROM "tags" WHERE "tags"."name" = 'c#'
 => [#<Tag id: 38, name: "c#", num_questions: 435620, created_at: "2013-03-23 07:03:27", updated_at: "2013-03-29 15:34:10", questions_count: 130, slug: "c--3">] 

请注意每一条上的slu - 以及它们与每条记录的name的对应方式。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

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

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