2012-04-05 9 views
3

私はこのモデルの "Profile"モデルと2つのActiveRecord :: Relationsを持っています。最初の関係のSQL要求は非常に大きいです。 2番目はRailsは2つのActiveRecord :: Relationをマージします

Profile.where(:id => 1) 

最初に2番目の関係を追加します。その結果、第2の関係には最初のprrofileが含まれます。

私は

first.merge(second) 

しようとしたが、それは空の関係を返します。 Railsのバージョンは3.2.2です もちろん、結果はリレーションでなければなりません。このリレーションに.limit()と.paginate()を追加する必要があります。

答えて

2

あなたは、このように、既存のリレーションに追加.where句をタックすることができます

relation = Thing.joins(:associated_things => [:users, :still_more_things]).where(:condition => true) 
new_relation = relation.where(:id => 1) 

これは、新しい「どこ」を使用して、既存の1とを結合します。 ActiveRecord :: RelationはORを使用して 'wheres'に参加することはサポートしていません。必要な場合は、Rails 3.1+を使用している場合はSqueel(https://github.com/ernie/squeel)、meta_where( 3.0についてはhttps://github.com/ernie/meta_where)。

0

マージは、最初のリレーションの同じキーの値をマージされたリレーションの値で上書きします。

関連する問題