Ruby on rails FriendlyID不构建HTML转义段塞

Ruby on rails FriendlyID不构建HTML转义段塞,ruby-on-rails,friendly-url,friendly-id,Ruby On Rails,Friendly Url,Friendly Id,我有友好的id设置,一切正常,使用slug 我遇到的问题是,我的标记模型(FriendlyId附加到的模型)上的一些名称需要进行HTML转义 类名称,如C++或.NET .< 当我运行Tag.find_each:&save时,它为我生成了所有的slug…但是在那些具有这些名称的标记上,发生了以下情况: > c = Tag.where(:name => "c++") Tag Load (0.9ms) SELECT "tags".* FROM "tags" WHERE "tags"

我有友好的id设置,一切正常,使用slug

我遇到的问题是,我的标记模型(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">] 
注意每一条记录上的段塞,以及它们如何与每条记录的名称不正确对应


如何修复此问题?

友好\u id至少当您使用:use=>:slugged调用它时,尝试清理字段值,以便它在URL中看起来很好。如果要更改该行为,可以重写。如果您这样做,您将需要确保URL编码您的slug,因为像这样的东西在URL中已经有了特殊的意义


对于后来遇到这种情况的人来说,有效的解决方案是避免使用友好的\u id:使用\u sluged,而只是使用标签的原始名称,并让Rails的链接助手自动转义它们。对于.net标记,它还要求将路由更改为resources:tags,:constraints=>{:id=>/.*/},以防止Rails将点解释为路径分隔符。

Soo….而不会变得如此复杂…我如何允许这些简单的名称像我希望的那样工作?我假设您需要在URL中显示段塞?如果是这样,您希望如何处理像这样的问题角色?特别是对于符号,您必须替换它或对其进行URL编码。正如您正确指出的,normalize_-friendly_-id它所做的只是对字符串进行参数化调用-不过,我想做的是让这些字符串正常工作。当我在Rails控制台中进行c.parameterize时,我得到了>c.parameterize=>c,这正是我不想要的。标记/c的URL编码版本是什么样的?希望不是标签/c,因为在这种情况下这是错误的。只要您不关心在将标记名放在视图中时标记名是URL编码的,您就可以删除:use=>slugged,只使用您的标记名作为slug。这与堆栈溢出的作用类似,您可以看到它们对C标记进行了URL编码,例如: