0

我已经friendly_id正确设置并且一切正常,使用蛞蝓。

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

c++或之类的名称.net

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

> 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">] 

请注意每一个上的 slug - 以及它们如何与name每条记录的不正确对应。

我该如何解决?

4

1 回答 1

1

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

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

于 2013-03-29T17:13:26.860 回答