命名范围和命名范围有什么区别+拉姆达

发布于 2024-09-15 21:16:04 字数 319 浏览 5 评论 0原文

name_scope 和named_scope + lambda Ruby on Rails 代码语句之间有什么区别?

named_scope :with_avatar, :conditions => ['avatar IS NOT NULL']

named_scope :date_from, lambda { |date| { :conditions => ['created_at >= ?', DateTime.strptime(date, '%d.%m.%Y')] } }

What is a difference between named_scope and named_scope + lambda Ruby on Rails code statements?

named_scope :with_avatar, :conditions => ['avatar IS NOT NULL']

and

named_scope :date_from, lambda { |date| { :conditions => ['created_at >= ?', DateTime.strptime(date, '%d.%m.%Y')] } }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

恏ㄋ傷疤忘ㄋ疼 2024-09-22 21:16:04

使用 lambda,您可以指定作用域的参数。

在上述情况下,您可以说

Model.with_avatarModel.date_from("10.08.2010"),但是您不能说 Model.with_avatar( false)

在这种情况下,您需要对 lambda 的参数小心一些:除非您将参数传递给 date_from,否则它可能不起作用。一种“解决方法”是使用 |*date| ,检查它是否已传入,如果没有则将其设置为某个默认值。

With the lambda, you can specify arguments to the scope.

In the above case, you could say

Model.with_avatar and Model.date_from("10.08.2010"), however you cannot say for example Model.with_avatar(false)

In this case, you need to be somewhat careful about the arguments to the lambda: unless you pass an argument to date_from, it will probably not work. One "workaround" is to use |*date| , check if it was passed in and set it to some default value if it wasn't.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文