我知道可以根据数组进行最新书籍的查询,例如:
scope :recent_books, lambda {|since_dt| {:conditions=>{:created_at >= since_dt}}}
但是如果我有一个项目的数组,如何进行类似的查询,例如,如果我想知道是否有任何记录与[日期1、日期2、日期3等]数组中的日期匹配?
我觉得可能会有一个 collect/inject/select/map 方法来完成,但我不确定哪个是正确的。
我知道可以根据数组进行最新书籍的查询,例如:
scope :recent_books, lambda {|since_dt| {:conditions=>{:created_at >= since_dt}}}
但是如果我有一个项目的数组,如何进行类似的查询,例如,如果我想知道是否有任何记录与[日期1、日期2、日期3等]数组中的日期匹配?
我觉得可能会有一个 collect/inject/select/map 方法来完成,但我不确定哪个是正确的。
如果你将一个数组作为值传递,ActiveRecord会智能地比较是否包含在这个数组中。例如:
Book.where(:author_id => [1, 7, 42])
生成一个类似于以下 WHERE
子句的 SQL 查询:
WHERE "author_id" IN (1, 7, 42)
你可以像设置普通条件一样在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
然后,您可以将单个ID或ID数组传递给 by_author
,它就会正常工作:
Book.by_author([1,7,42])
scope :news, -> { where(:categories => '{news}') }
或者带一个参数:
scope :by_category, ->(category) { where(:categories => "{#{category}}") }
named_scope
иҜӯжі•жңүдәӣеҸҳеҢ–пјҢдҪҶжҳҜеңЁRails2дёӯдҪҝз”Ёlambdaж–№жі•жҳҜеҗҰеҸҜиЎҢпјҹи°ўи°ўпјҢMichaelгҖӮ - Michael Durrantwhere
调用更改为conditions
哈希即可。 - David