ruby - rails路由constraints问题
本文介绍了ruby - rails路由constraints问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
初学rails,有几个问题不明白。
class NamespaceConstraint
def self.matches?(request)
name = request.fullpath.split('/').second.downcase
if name[0] == '~' then name = name[1..-1] end
ns = Namespace.where(name_lower: request.fullpath.split('/').second.downcase).first
not ns.nil?
end
end
Rails.application.routes.draw do
constraints(NamespaceConstraint) do
get ':namespace' => 'namespaces#show'
end
end
这段代码大致是什么意思?
self.matches?
这个函数名问号是什么意思?这个
request
变量名并没有定义,是rails自动生成的吗?not ns.nil?
这个是啥意思?
解决方案
ruby中约定带 ? 的方法返回值是true/false
request是rails controller中自定义的变量,同样的对应的 response也是
not 是取反的意思,比如 not true就是false, ns.nil?返回的是一个boolean类型, not取反
这个方法是用于匹配路由的,request.fullpath 返回的是相对路径比如blogs.com/blogs则返回/blogs,那么第一行最终获取的是 ‘blogs’,然后将'blogs'去查找当前路由是否有与之匹配的,有则true 无则false.
这些方法你都可以在本地尝试一步步跑一遍,这不是个复杂的东西
这篇关于ruby - rails路由constraints问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文