6

ランタイム データを使用して ActiveRecord クエリをつなぎ合わせたいと思います。私が念頭に置いているのは、次のようなものです...

r = Person.where('last_name LIKE ?', foo)
r.where('created_at < ?', Time.now - 100.days)
r.where( ...some other conditions... )

しかし、それは意図したとおりには機能しません。それを機能させるには、それらをすべて1行にチェーンする必要があります...

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 に答える