我正在学习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?
这意味着什么?我是红宝石的完全初学者。 谢谢你帮我解决了这个问题。
答案 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。同时学习编程语言和框架并不是一个好主意,因为你会在心理上融合在一起。