在轨道中遇到约束路线感到困惑

时间:2016-10-09 13:24:35

标签: ruby-on-rails ruby

我正在学习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 var未定义,rails是否创建了它?
  • not ns.nil?这意味着什么?

我是红宝石的完全初学者。 谢谢你帮我解决了这个问题。

1 个答案:

答案 0 :(得分:2)

  

在self.matches? ?意味着什么?

在Ruby中,当命名方法时,你可以在大多数其他语言中使用更多的字符。

其中包括?!。它们对翻译没有特殊意义。

然而,社区中的惯例是以?结尾的方法是疑问句。他们会告诉你某些事情是真还是假。

class Person
  attr_accessor :age

  def initialize(age = 0)
    @age = age
  end

  def drinking_age?
    @age >= 18
  end
end 
  

此请求var未定义,rails是否创建了它?

在此上下文中,

request是方法参数。

.matches?方法中,局部变量request是您传递给方法的任何内容。

Rails在检查传入请求是否与您的自定义约束匹配时调用NamespaceConstraint.matches?(request) *之类的东西。

request对象由Rack中间件创建。

  

不是ns.nil?

not是取消以下表达式的关键字。就像在英语中一样。由于优先级,!更常用。

红宝石中的

nil没什么 - 一个未定义或没有价值的值。

所以.nil?告诉你变量是否为零。 ruby中的每个对象都响应此方法。

irb(main):007:0> 0.nil?
=> false
irb(main):008:0> false.nil?
=> false
irb(main):009:0> nil.nil?
=> true

因此not ns.nil?将简体中文翻译为:is ns not nothing?is ns anything?

结论

你真的离开了你的深度。你做某事的唯一原因 如果你在哪里建立一个多租户应用程序 - 这几乎不是一项任务 适合初学者。

首先要学习Ruby语言的基础知识。

然后重新访问Rails。同时学习编程语言和框架并不是一个好主意,因为你会在心理上融合在一起。