Ruby on rails Rails友好的\u id删除用于url生成的非ascii字符

Ruby on rails Rails友好的\u id删除用于url生成的非ascii字符,ruby-on-rails,friendly-id,Ruby On Rails,Friendly Id,我想根据书名和作者自动生成slug,可以是任何语言。在rails中使用友好的_id,当存在非ascii字符时,它只删除它们。我知道从技术上讲,我可以通过如下方式编码它们: class Resource < ApplicationRecord extend FriendlyId friendly_id :title_and_author, use: :slugged def title_and_author "#{URI::encode(title)} by #{URI

我想根据书名和作者自动生成slug,可以是任何语言。在rails中使用友好的_id,当存在非ascii字符时,它只删除它们。我知道从技术上讲,我可以通过如下方式编码它们:

class Resource < ApplicationRecord
  extend FriendlyId
  friendly_id :title_and_author, use: :slugged

  def title_and_author
    "#{URI::encode(title)} by #{URI::encode(author)} #{language.language} book"
  end
end
更新2: 好的,俄语和德语B现在很好用,但是汉字现在引起了问题。在数据库中,slug将另存为
”/哈利波特百科全书-by-J-K.-Rowling中文(普通话)-book-ed265df6-73d2-4b87-9326-524c2684756d“
,但当我进入页面时,url显示
http://localhost:3000/resources/%2F%E5%93%88%E5%88%A9%E6%B3%A2%E7%89%B9%E7%99%BE%E7%A7%91%E5%85%A8%E4%B9%A6-by-J-K-罗琳中文(普通话)-book-ed265df6-73d2-4b87-9326-524c2684756d
并抛出一个
无路由匹配[GET]
错误。即使我复制并粘贴
http://localhost:3000/resources/%E5%93%88%E5%88%A9%E6%B3%A2%E7%89%B9%E7%99%BE%E7%A7%91%E5%85%A8%E4%B9%A6-通过-J.-K.-Rowling中文-(普通话)-book-ed265df6-73d2-4b87-9326-524c2684756d
进入浏览器,我仍然收到一个无路由错误

更新3 我意识到这是一个比我最初意识到的更大的范围。我找到了一些关于人们询问如何处理其他脚本的文章,如、、等,但他们都建议翻译这种特定语言。没有gem,或者在URL中包含任何语言的方法吗

我看过这个,但没有任何亚洲脚本

默认情况下,FriendlyId使用活动支持的 方法来创建段塞。此方法将智能地替换空间 使用破折号和ASCII近似值的Unicode拉丁字符:

movie = Movie.create! :title => "Der Preis fürs Überleben"
movie.slug #=> "der-preis-furs-uberleben"

您可以通过覆盖
#normalize\u-friendly\u-id
方法来覆盖段塞生成过程:

class User < ActiveRecord::Base
  friendly_id :name

  def normalize_friendly_id(string)
    string
  end
end
class用户
为什么首先要删除角色


它被称为音译,是出于兼容性的原因。虽然现代浏览器支持URL中的UTF-8字符,但情况并非总是如此,服务器端的支持也不稳定。

谢谢。伟大的解释它解决了俄语,但现在汉字不起作用:(这可能是一个不相关的编码问题。一旦覆盖了该方法,您只需直接传递字符串。此外,路由错误与段塞无关。这意味着您没有与给定模式匹配的路由。
GET/resources/*?/
class User < ActiveRecord::Base
  friendly_id :name

  def normalize_friendly_id(string)
    string
  end
end