9

Ruby on Rails 3.2.2 を使用していますが、テーブルがまだ結合されていない場合にのみ、スコープ メソッドでテーブルを「動的に」結合できるかどうかを知りたいです。それは、私が持っている:

def self.scope_method_name(user)
  joins(:joining_association_name).where("joining_table_name.user_id = ?", user.id)
end

次のようなものを作りたいと思います:

# Note: the following code is just a sample in order to understand what I mean.
def self.scope_method_name(user)
  if table_is_joined?(joining_table_name)
    where("joining_table_name.user_id = ?", user.id)
  else
    joins(:joining_association_name).where("joining_table_name.user_id = ?", user.id)
  end
end

それを行うことは可能ですか/お勧めですか?もしそうなら、どのように進めるべきですか?


SQLクエリで複数のデータベーステーブルステートメントINNER JOINを回避するためにこのアプローチを使用したいと思います(場合によっては、複数のテーブルステートメントのためにSQLクエリが期待どおりに機能しないようですscope_method_name)。関連するSQLクエリの懸念を気にせずに使用します(私の場合、データベーステーブルを結合することを気にせずに).

:データベース テーブルにまだ結合していない場合、SQLActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'joining_table_name.user_id' in 'where clause'エラー(たとえば、「関連テーブル)。ClassName.scope_method_name(@user) joining_association_namejoining_table_name

4

1 に答える 1

-1

loaded?関連付けが読み込まれたかどうかを確認するメソッドはどこにありますか。あなたはそれを使ってみることができます。

if association_name.loaded?
   where("joining_table_name.user_id = ?", user.id)
else
   joins(:joining_association_name).where("joining_table_name.user_id = ?", user.id)
end
于 2012-06-27T13:23:46.463 に答える