Ruby on rails params中没有与日语匹配的路由
我想要一个像Ruby on rails params中没有与日语匹配的路由,ruby-on-rails,ruby,ruby-on-rails-4,routes,constraints,Ruby On Rails,Ruby,Ruby On Rails 4,Routes,Constraints,我想要一个像/posts/category1/category2/这样的URL,所以我在routes.rb中写了以下内容: 类别约束 def自我匹配?(请求) xparams=request.params[:k].split(“/”) xparams&Category.pluck(:name)==xparams 终止 终止 RailsApp::Application.routes.draw do 获取“/posts(/:k)”=>“posts#index”,约束:CategoryConstrai
/posts/category1/category2/
这样的URL,所以我在routes.rb
中写了以下内容:
类别约束
def自我匹配?(请求)
xparams=request.params[:k].split(“/”)
xparams&Category.pluck(:name)==xparams
终止
终止
RailsApp::Application.routes.draw do
获取“/posts(/:k)”=>“posts#index”,约束:CategoryConstraints
终止
它适用于罗马书类别名称,但当类别名称为日语时,例如当我访问/posts时/新規開発/代码>,a出现以下错误:
No route matches [GET] "/posts/%E6%96%B0%E8%A6%8F%E9%96%8B%E7%99%BA/
我认为这是因为日文字符被转换为Unicode,所以route
不起作用。如果我改为constraints:{k://.*/}
,一切正常,但我无法像第一种方法那样处理constraints
中的逻辑(在不访问CategoryConstraints
类的情况下,routes
返回false)。请帮助我使用第一种方法的附加逻辑来实现这一点。我猜是类别。名称不是以unicode格式存储的,因此它与xparams
中的内容不匹配。您需要确保这两个值都是unicode,以便能够正确匹配它们
我认为类似的问题可能会解决您的问题:
事实上,这是一个带有params的过滤器,params是类别的名称
,因此我必须检查所有的params是否都存在于类别中。嗯……是否更快?当我使用像/posts/category1/something\u不存在这样的链接时
我能提出404
错误吗?你能再解释一下吗?我查过了。它们都是Unicode
。问题是:请求在类别约束
之外失败(如果我在类别约束
内有初始化
功能,请求
==无
),我无法进行任何检查或转换。当我使用这种方法时,如果我将约束更改为{k://.*/}
,一切都会很好地工作。