Mic*_*ant 6 ruby select model ruby-on-rails collect
我知道我可以查询基于数组的最新书籍
scope :recent_books, lambda {|since_dt| {:conditions=>{:created_at >= since_dt}}}
但是当我有一个项目数组时如何进行类似的查询,例如,如果我想知道是否有任何记录与[date1,date2,date3等]数组中的日期匹配,该怎么办?
我认为必须有一个collect/inject/select/map y方法才能做到,但我不确定从哪个读取它们.
Dav*_*vid 16
如果将数组作为值传递,则ActiveRecord足够智能,可以比较包含在数组中.例如,
Book.where(:author_id => [1, 7, 42])
Run Code Online (Sandbox Code Playgroud)
生成一个SQL查询,其WHERE子句类似于:
WHERE "author_id" IN (1, 7, 42)
Run Code Online (Sandbox Code Playgroud)
您可以scope像设置正常条件一样利用此功能:
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
Run Code Online (Sandbox Code Playgroud)
然后你可以传递一个ID或一组ID by_author,它只会工作:
Book.by_author([1,7,42])
Run Code Online (Sandbox Code Playgroud)
小智 5
在 Rails 4 中,我可以使用如下范围检查数组属性中是否包含字符串:
scope :news, -> { where(:categories => '{news}') }
Run Code Online (Sandbox Code Playgroud)
或者有一个参数:
scope :by_category, ->(category) { where(:categories => "{#{category}}") }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7615 次 |
| 最近记录: |