0

次のコードがあるとします

class Product < ActiveRecord::Base

 def self.from_country(country)
   where(:origin_country_id => country.id)
 end

 def self.for_country(country)
   where(:destination_country_id => :country.id)
 end
end

製品を製造してドイツに流通させたい場合は、次のことができます。

Product.for_country.from_country #=> ActiveRecord::Relation
products = Product.for_country.from_country #=> Array[<Product...>...]

上記の場合、必要に応じて、製品に割り当てる前に、より多くのリレーショナル メソッドを連鎖させることができます。

ドイツに関連するすべての製品にアクセスしたい場合は、次のようにします。

Product.for_country | Product.from_country #=> Array[<Product...>...]
products = Product.for_country | Product.from_country #=> Array[<Product...>...]

ここでは、OR の結果が::RelationではArrayないため、製品に割り当てる前にリレーショナル メソッドを連鎖させることはできません。ActiveRecord

私の質問は、for_country と from_country を OR しActiveRecord::Relationて、結果として a を取得するにはどうすればよいですか?

理想的には、次のようなものProduct.for_country(country).or(Product.from_country(country))

4

1 に答える 1

0

ActiveRecordで「OR」ステートメントを作成するにはどうすればよいですか?

それがあなたの質問に対する正確な答えではないことは知っていますが、この'または'ロジックを使用したような別の方法を使用すると、他のコードがチェーンや。involving_countryよりもはるかに読みやすくなります。連鎖したこれらの方法は、実際にはあまりよく説明されていません。from_countryfor_country

于 2010-12-15T21:27:26.190 に答える