オブジェクト? +演算子を試すと、配列が返されます。しかし、私は関係を返すためにそれが必要です。追加2人のActiveRecord ::関係は、あなたが一緒に2つの関係を追加するにはどうすればよい
おかげで、 マイク
オブジェクト? +演算子を試すと、配列が返されます。しかし、私は関係を返すためにそれが必要です。追加2人のActiveRecord ::関係は、あなたが一緒に2つの関係を追加するにはどうすればよい
おかげで、 マイク
試してみてください。
new_relation = relation.merge(another_relation)
何の関係の一つがnilであることを起こる場合は? – Matt
@Mattはまだ1が – kittyminky
@kittyminky nilの場合でも1がnilであれば、結果はゼロになり動作します。 – Anwar
はあなたではなく 'AND' 'OR' の結果を得るためにはActiveRecord ::関連オブジェクトを追加する場合(あなたが得る 'AND' と思います)を連鎖することで行動し、あなたはまだいくつかの他のコード(例えばmeta_search、)で素晴らしいプレーするのActiveRecord ::関連する結果を必要とする....
def matching_one_or_two
temp = Model.matching_one + Model.matching_two
Model.where('id in (?)',temp.map(&:id))
end
確かではない、世界のGRE atestのパフォーマンスを示しますが、結果として 'OR'の結果を指すActiveRecord :: Relationオブジェクトが生成されます。
また、単にではなく、データベース・アプリケーションをより良い実行するための機会を与えるために、あなたのためにそれを生成するためのRailsのを頼むよりも、直接SQLに「OR」を置くことができます。一つの例:
Model.where( "table_name.col = '1' OR table_name.col = '2'")
ものActiveRecord ::リレーションオブジェクトを返します。
あなたは優れたスクリーンキャストを見ることができAREL制約
constraints_1 = Model.matching_one.arel.constraints
constraints_2 = Model.matching_two.arel.constraints
Model.where(constraints_1.and(constraints_2)).class => ActiveRecord::Relation
を使用でき
またはオペレータすぎ
Model.where(constraints_1.or(constraints_2)).class => ActiveRecord::Relation
実例
constraints_1 = User.where(id: 1..5).arel.constraints
constraints_2 = User.where('id != 2').arel.constraints
User.where(constraints_1.and(constraints_2))
と2つのActiveRecord ::リレーションを追加することができますそのことについてhttp://railscasts.com/episodes/355-hacking-with-arel
かっこを修正してください。それは私の目を傷つける: - P – schmijos
なぜあなたはすべてのあなたが必要得るためにスコープを作ることができませんか?何か複雑なのですか、この場合はできませんか?データベースレベルで行うことができるものがあれば、それをアプリケーションレベルにしないでください。 –