加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何在模型中使用命名范围来对付项目数组?

发布时间:2020-12-16 21:25:46 所属栏目:百科 来源:网络整理
导读:我知道我可以查询基于数组的最新书籍 范围:recent_books,lambda {| since_dt | {:conditions = {:created_at = since_dt}}} 但是当我有一系列项目时,如何进行类似的查询,例如如果我想知道是否有任何记录与[date1,date2,date3等]数组中的日期匹配,该怎么办
我知道我可以查询基于数组的最新书籍

范围:recent_books,lambda {| since_dt | {:conditions => {:created_at> = since_dt}}}

但是当我有一系列项目时,如何进行类似的查询,例如如果我想知道是否有任何记录与[date1,date2,date3等]数组中的日期匹配,该怎么办?

我认为必须有一个collect / inject / select / map y方法才能做到,但我不确定从哪个读取它们.

解决方法

如果将数组作为值传递,则ActiveRecord足够智能,可以比较包含在数组中.例如,
Book.where(:author_id => [1,7,42])

生成一个带有WHERE子句的SQL查询,类似于:

WHERE "author_id" IN (1,42)

您可以像设置正常条件一样在范围内利用此功能:

class Book < ....
  # Rails 3
  scope :by_author,lambda { |author_id| where(:author_id => author_id) }

  # Rails 2
  named_scope :by_author,lambda { |author_id
    { :conditions => {:author_id => author_id} }
  }
end

然后,您可以将一个ID或一组ID传递给by_author,它将起作用:

Book.by_author([1,42])

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读