rubyonrails&;用符号调用方法的基本问题
出于某种原因,我还没有完全了解Rails如何与Ruby交互/了解Ruby本身 我会说到点子上的。例如,在Ruby on Rails项目中,您可能会遇到如下情况:rubyonrails&;用符号调用方法的基本问题,ruby,ruby-on-rails-3,symbols,Ruby,Ruby On Rails 3,Symbols,出于某种原因,我还没有完全了解Rails如何与Ruby交互/了解Ruby本身 我会说到点子上的。例如,在Ruby on Rails项目中,您可能会遇到如下情况: class Product < ActiveRecord::Base default_scope :order => 'title' end 我知道它的作用,但它的语法让我大吃一惊。首先,看起来符号用于静态重用字符串值,但这里我们在。。。那要去哪里?那么我们是一个符号中的一个符号吗?这基本上是一个散列中的散列还是它到底在做
class Product < ActiveRecord::Base
default_scope :order => 'title'
end
我知道它的作用,但它的语法让我大吃一惊。首先,看起来符号用于静态重用字符串值,但这里我们在。。。那要去哪里?那么我们是一个符号中的一个符号吗?这基本上是一个散列中的散列还是它到底在做什么?我只是想在我的大脑中找到它,以便真正理解发生了什么
default_scope :order => 'title'
是一个方法调用
default_scope( {:order => 'title'} )
在这种情况下,Ruby允许您省略括号和大括号
validates :price, :numericalcity => {:greater_than_or_equal_to => 0.01 }
意味着
是一个方法调用
default_scope( {:order => 'title'} )
在这种情况下,Ruby允许您省略括号和大括号
validates :price, :numericalcity => {:greater_than_or_equal_to => 0.01 }
意味着
您正确地假设
default\u scope
是从ActiveRecord::Base继承的方法。转到查看default\u范围的源代码
它是一种将可选哈希作为唯一参数的方法
这个,
和写它一样
default_scope( { :order => 'title' } )
在ruby中,如果方法的定义如下:
def foobar(options = {})
p options
end
但是要注意语法上的细微差别。上面,如果您省略了()
保留{}
,ruby会将其理解为完全不同的东西。Ruby看到一个方法default\u scope
,它接受代码块作为参数
default_scope { # code block }
此方法定义如下所示:
def foobar(&block)
yield
end
了解ruby块是如何工作的
你可以这样称呼它
foobar :key_1 => 'value_1', "key_2" => 'value_2'
Ruby知道这是
foobar( { :key_1 => 'value_1', "key_2" => 'value_2' } )
散列的键可以是符号,也可以不是符号
对于列属性price
的验证助手方法
validates :price, :numericality => { :greater_than_or_equal_to => 0.01 }
与,
validates( :price, { :numericality => { :greater_than_or_equal_to => 0.01 } } )
这类似于方法定义,如
def validates(column_attr, options = {})
# perform validation of column_attr
end
您正确地假设default\u scope
是从ActiveRecord::Base继承的方法。转到查看default\u范围的源代码
它是一种将可选哈希作为唯一参数的方法
这个,
和写它一样
default_scope( { :order => 'title' } )
在ruby中,如果方法的定义如下:
def foobar(options = {})
p options
end
但是要注意语法上的细微差别。上面,如果您省略了()
保留{}
,ruby会将其理解为完全不同的东西。Ruby看到一个方法default\u scope
,它接受代码块作为参数
default_scope { # code block }
此方法定义如下所示:
def foobar(&block)
yield
end
了解ruby块是如何工作的
你可以这样称呼它
foobar :key_1 => 'value_1', "key_2" => 'value_2'
Ruby知道这是
foobar( { :key_1 => 'value_1', "key_2" => 'value_2' } )
散列的键可以是符号,也可以不是符号
对于列属性price
的验证助手方法
validates :price, :numericality => { :greater_than_or_equal_to => 0.01 }
与,
validates( :price, { :numericality => { :greater_than_or_equal_to => 0.01 } } )
这类似于方法定义,如
def validates(column_attr, options = {})
# perform validation of column_attr
end
您的示例是错误的:default\u范围{:order=>'title'}
被视为一个块而不是散列参数。您应该编写default\u范围({:order=>'title'})
您的示例是错误的:default\u范围{:order=>'title'}
被认为是块而不是散列参数。您应该编写default\u范围({:order=>title})