Ruby on rails Rails友好的\u id删除用于url生成的非ascii字符
我想根据书名和作者自动生成slug,可以是任何语言。在rails中使用友好的_id,当存在非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
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