范围仅仅是语法糖,还是使用类与使用类方法有什么真正的优势?
下面是一个简单的示例。据我所知,它们是可互换的。
scope :without_parent, where( :parent_id => nil )
# OR
def self.without_parent
self.where( :parent_id => nil )
end
每种技术最适合什么?
编辑
named_scope.rb提到以下内容(如下goncalossilva所指出):
行54:
行113:
class Shirt < ActiveRecord::Base
scope :red, where(:color => 'red') do
def dom_id
'red_shirts'
end
end
end
最佳答案
对于简单的用例,可以将其视为语法糖。但是,还存在一些其他差异。
例如,一种是在范围内定义扩展的能力:
class Flower < ActiveRecord::Base
named_scope :red, :conditions => {:color => "red"} do
def turn_blue
each { |f| f.update_attribute(:color, "blue") }
end
end
end
在这种情况下,
turn_blue
仅适用于红色花朵(因为它不是在Flower类中定义的,而是在作用域本身中定义的)。关于ruby-on-rails - Rails 3中的作用域与类方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6375896/