2

ご存知のように、スコープは呼び出し時にロードを開始します。だからこの表現

articles = Article.published
articles.newest

2 つのクエリを取得します。はい、私たちはこれを行うことができます

articles = Article.published.newest

しかし、条件が必要な場合はどうすればよいですか? foo == bar の場合、チェーンを続行します。

4

3 に答える 3

11

あなたは間違っています。あなたの例では、2行:

articles = Article.published
articles.newest

これにより、2 つのクエリが生成されることはありません。連鎖を続けることができる理由は、これらの呼び出しが を返すためActiveRecord::Relationです。これは、トラバーサルでクエリを実行するか、count、sum、またはその他の集計メソッドなどの他のいくつかのメソッド呼び出しを選択するだけです。

これをコンソールから見ている場合、各行がクエリを生成しているように見えます。これは、コンソールでは、inspectすべての評価の後に呼び出される暗黙的な呼び出しがあり、クエリが生成されるためです。

于 2013-03-02T14:13:02.610 に答える
0

以下のようにすることができます:

articles = foo == bar ? Article.published.newest : Article.published
于 2013-03-02T13:51:48.227 に答える
0

同じテーブル内の条件?

@a = Article.where("published = true AND foo = bar").order("publishing_date desc").limit(1)

複数のテーブルで一括読み込みが必要な場合は、includes(...)メソッドを使用します。

于 2013-03-02T13:50:56.693 に答える