gpt4 book ai didi

ruby-on-rails - Rails 3中的作用域与类方法

转载 作者:行者123 更新时间:2023-12-04 05:49:20 25 4
gpt4 key购买 nike

范围仅仅是语法糖,还是使用类与使用类方法有什么真正的优势?

下面是一个简单的示例。据我所知,它们是可互换的。

scope :without_parent, where( :parent_id => nil )

# OR

def self.without_parent
self.where( :parent_id => nil )
end

每种技术最适合什么?

编辑

named_scope.rb提到以下内容(如下 goncalossilva所指出):

54:

Note that this is simply 'syntactic sugar' for defining an actual class method



113:

Named scopes can also have extensions, just as with has_many declarations:


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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com