6

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

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

4

2 回答 2

19

查询接口方法(如.where)返回一个新对象。所以你只需要坚持下去。看:

r = Person.where('last_name LIKE ?', foo)
r = r.where('created_at < ?', Time.now - 100.days)
r = r.where( ...some other conditions... )
于 2012-04-13T23:21:27.933 回答
2

令人沮丧的是,当您调用其方法时,Arel 不会改变对象或基础查询。但是每个方法都返回允许链接的 Arel 对象。你所要做的:

r = Person.where(...
r = r.where('created_at...')

等等等等

于 2012-04-13T23:22:31.040 回答