ruby-on-rails – Rails:lambda,scope和class方法有什么区别?
代码片段有三种方法:lambda,scope和class方法.
所有这些都返回相同的结果. 问题: > Ruby / Rails中有哪些优先使用一种? class Cars < ActiveRecord::Base attr_accessible :manufacturer,:price,:used #one scope :used_and_cheap_lambda,lambda { where('used = ?',true ).where('price >= ?',30000) } #two scope :used_and_cheap_scope,where('used = ?',30000) #three def self.used_and_cheap_class where('used = ?',30000) end end Cars.used_and_cheap_lambda.count => #24 Cars.used_and_cheap_class.count => #24 Cars.used_and_cheap_scope.count => #24 解决方法
最好避免使用选项2.当您的Rails应用程序加载不正确时,该代码将立即运行,因为它将始终为您使用的任何Time参数返回相同的值.这是因为它每次调用时都不会被重新评估.
选择1,如musicnerd47所指出的,它们是懒惰的,并且建议您将Lambdas传递给Rails 4中的范围,而不是执行选项2,因为每次调用它们都将被重新评估,因此它们将返回更新的值. 所以唯一的选择是1和3.这通常是你的团队坚持的风格问题.在我们公司,我们使用选项1,当我们传递给它的代码将是一个ActiveRecord查询,我们希望它输出一个可以链接的查询.这是为了确保每次对多个记录进行查询时都会返回一个ActiveRecord :: Relation对象.这意味着它们总是可以与其他ActiveRecord :: Relation方法和我们其他定义的范围链接. 如果用于不需要与其他范围链接的行为,则使用选项3. 以下是对范围和class_methods的详细介绍,他详细介绍了范围和类方法之间的区别. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |