如何逐行逐步建立ActiveRecord查询?

时间:2012-04-13 23:18:39

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord arel

我想使用运行时数据拼凑一个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... )

我正在试图找到一种方法将其分散到多行的单独操作中。

2 个答案:

答案 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...')

等等。

相关问题