首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails: lambda、作用域和类方法之间有什么区别?什么是最佳实践?

Rails: lambda、作用域和类方法之间有什么区别?什么是最佳实践?
EN

Stack Overflow用户
提问于 2013-12-15 16:55:15
回答 4查看 4.9K关注 0票数 14

code片段有三种方法:lambdascopeclass method

它们都返回相同的结果。

问题:

  1. Ruby/Rails中有什么最佳实践是首选的,而不是另一个呢?
  2. 在什么情况下,您会使用lambdascopeclass方法(最佳实践)。 Cars < ActiveRecord::Base attr_accessible :出厂,:price,:used #one scope :used_and_cheap_lambda,λ{ where('used =?,true ).where(‘>=?,30000’)}#双作用域:used_and_cheap_scope,其中(‘used=?,true ).where(’.where >=‘,30000) #three def self.used_and_cheap_class where('used = ?',(真).where(“价格>=?”,30000)结束Cars.used_and_cheap_lambda.count => #24 Cars.used_and_cheap_class.count => #24 Cars.used_and_cheap_scope.count => #24
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-12-15 17:29:06

最好避免使用选项2,这段代码在Rails应用程序加载时立即运行,这很糟糕,因为它在任何时候都会返回相同的值。这是因为它不是每次被调用时都会被重新评估。

正如musicnerd47所指出的,选项1是延迟加载的,您最好将lambda传递给Rails 4中的作用域,而不是执行选项2,因为每次调用它们时都会重新计算它们,因此它们将返回更新的值。

所以唯一的选择是1和3,这通常是你的团队所坚持的风格问题。在我们的公司中,当我们传递给它的代码是一个ActiveRecord查询时,我们使用选项1,我们希望它输出一个可以链接的查询。这是为了确保每次查询多个记录时都返回ActiveRecord::Relation对象。这意味着它们总是可以与其他ActiveRecord::Relation方法和我们定义的其他作用域链接。

如果选择3用于不需要与其他作用域链接的行为,则使用选项3。

这里很好地介绍了作用域和class_methods的内容,他详细介绍了这些内容,并举例说明了作用域和类方法之间的区别。http://blog.plataformatec.com.br/2013/02/active-record-scopes-vs-class-methods/

票数 5
EN

Stack Overflow用户

发布于 2013-12-15 17:18:04

从Rails 4开始,您必须使用lambda --一般来说,这是一个更好的实践,因为它是懒惰加载的,并且防止了很多陷阱,特别是在处理日期和时间时。

我认为对于处理单个where调用之类的简单范围来说,使用scope是可以的。当它更复杂时,那么移动到类方法会更好(例如,在返回作用域之前,您需要调用其他方法或设置局部变量)。

票数 4
EN

Stack Overflow用户

发布于 2013-12-15 16:59:59

我会用蓝光。您所描述的函数非常简单。使用lambda也会延迟初始化。我向您介绍这里的rails样式指南。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20597139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档