首页  >  问答  >  正文

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
黄舟黄舟2709 天前625

全部回复(2)我来回复

  • 天蓬老师

    天蓬老师2017-04-25 09:04:04

    • 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.

    • 这些方法你都可以在本地尝试一步步跑一遍,这不是个复杂的东西

    回复
    0
  • PHPz

    PHPz2017-04-25 09:04:04

    雷雷

    回复
    0
  • 取消回复