如何进行逻辑或使用两个Active Relation结果返回另一个关系

时间:2010-12-15 19:49:31

标签: ruby-on-rails activerecord arel

鉴于我有以下代码

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的结果是Array而不是ActiveRecord :: Relation。

我的问题是我如何通过from_country或for_country获得ActiveRecord::Relation作为结果?

理想情况类似于以下Product.for_country(country).or(Product.from_country(country))

1 个答案:

答案 0 :(得分:0)

How can I make an 'OR' statement in ActiveRecord?

我知道这不是你问题的确切答案,但我会说另一种方法,例如使用这个'或'逻辑的involving_country会使你的其他代码比链接{{1更易读}和from_country。那些被束缚的方法并没有真正解释得很好。