ruby-on-rails
  • ruby-on-rails-4
  • rails-activerecord
  • 2016-07-28 17 views 1 likes 
    1

    言語が異なるため、スキーマがあります。http://sqlfiddle.com/#!15/cba5e/2 スペイン語の翻訳(コード "es")のみを使用する必要があります。見えるはずですLEFT OUTER JOINとON句の複数の条件を使用しています。

    SELECT * 
    FROM senses s 
    LEFT OUTER JOIN translations t ON 
        s.id = t.sense_id AND t.language_code = 'es'; 
    

    私はeager_load/includes/..で実行できますか?

    Sense.includes(:translations).where(translations: { language_code: 'es' }) 
    

    よう

    コードは、WHERE句で条件を指定しているので、仕事や

    SELECT * 
    FROM senses s 
    LEFT OUTER JOIN translations t ON s.id = t.sense_id 
    WHERE t.language_code = 'es'; 
    

    のようなクエリを生成して、私は「ES」の翻訳を感知し得ることはありません。制限句が処理され、WHEREに置かれている間、参加前に処理されたON句に置か 制限:http://sqlfiddle.com/#!15/cba5e/2http://sqlfiddle.com/#!15/cba5e/3

    ​​から:しかし、私は違いを参照して、すべて五感+スペインの翻訳を必要としますこれがどうなる

    +0

    私は以下の答えに答えました。それを評価する時間を作ってください – bLaXjack

    答えて

    0

    参加

    Sense.includes(:translations).where('translations.language_code = ?', 'es') 
    

    includesLEFT OUTER JOIN

    +0

    すでにこの質問に全く同じ答えがあります。 –

    +0

    私は答えを書いていて、あなたがそれをdownvoteされることを意味しない他の仕事をしていた –

    +0

    これは重複しているので、後で答え、このページで行われている以外の用途はありません。それは明確にそのようにマークする必要があり、downvoteはそれを行う方法です。誰もが重複した回答を投稿することができますが、それを保存するよりも前の回答をアップアップする必要があります。 –

    0

    左の外部結合を使用して読み込みを完了する方法を見つけました。それは条件との関連を使って行われます。

    Sense (model) 
    has_many es_translations -> { where(language_code: 'es') }, 
          :class_name => "Translations", 
          :foreign_key => "foreign_key_column" 
    
    # references is used to ensure eager load 
    Sense.includes(:es_translations).references(:es_translations) 
    

    これにより、ONクエリの条件付きで左外部結合が作成されます。

    関連する問題