3

クラス AI には 2 つのスコープ s1 と s2 があり、どちらもまったく同じ結合列を使用してテーブル T を結合します。

named_scope :s1 :joins => "JOIN T on T.id = A.t_id", ...some conditions
named_scope :s2 :joins => "JOIN T on T.id = A.t_id", ...some other conditions

今、これを行うと失敗します:

A.s1.s2.all

エラー:

ActiveRecord::StatementInvalid: Mysql::Error: 一意でないテーブル/エイリアス: 'T'

私は、Railsがこれらの同一の結合について賢く、結合を一度だけ適用することを期待していましたが、そうではありません。テーブル エイリアスを使用することもできますが、正当な理由もなく 2 つの同一の結合が残ってしまいます。

これには適切な解決策が必要だと思いますか?

4

1 に答える 1

1

これはRails 2.3.4のバグであることが判明しました:

私の実際のコードでは、JOIN 式の ON キーワードに別の大文字と小文字を使用しましたが、Rails はそれをマージするほどスマートではありませんでした。どうやら、スコープは JOIN 文字列で大文字と小文字を区別して比較を行います。

バグ レポートを開きました:リンク テキスト

于 2009-10-01T10:12:54.923 に答える