我想使用运行时数据拼凑一个ActiveRecord查询。我想到的是...... ...
r = Person.where('last_name LIKE ?', foo)
r.where('created_at < ?', Time.now - 100.days)
r.where( ...some other conditions... )
但这并不像预期的那样有效。为了使它工作,你必须将它们连在一起... ...
Person.where('last_name LIKE ?', foo) \
.where('created_at < ?', Time.now - 100.days) \
.where( ...some other conditions... )
我正在试图找到一种方法将其分散到多行的单独操作中。
答案 0 :(得分:18)
Query Interface方法(如.where
)返回一个新对象。所以你必须坚持下去。参见:
r = Person.where('last_name LIKE ?', foo)
r = r.where('created_at < ?', Time.now - 100.days)
r = r.where( ...some other conditions... )
答案 1 :(得分:2)
当您调用其方法时,Arel令人沮丧地不会改变对象或基础查询。但每个方法都返回Arel对象,允许链接。你必须这样做:
r = Person.where(...
r = r.where('created_at...')
等等。