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_name
joining_table_name