Как сделать логкал или использовать два результата ActiveRelation, возвращая другое отношение - PullRequest
0 голосов
/ 15 декабря 2010

Учитывая, что у меня есть следующий код

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...>...]

Здесь я не могу связать более реляционные методы перед назначениемэто к продуктам, так как результатом ИЛИ является Array, а не ActiveRecord :: Relation.

Мои вопросы: как я могу ИЛИ for_country с from_country и получить ActiveRecord::Relation в результате?

В идеале что-то вроде следующего Product.for_country(country).or(Product.from_country(country))

1 Ответ

0 голосов
/ 16 декабря 2010

Как сделать оператор «ИЛИ» в ActiveRecord?

Я знаю, что это не точный ответ на ваш вопрос, но я бы сказал, что другой метод, такой как involving_country, использующий эту логику 'или', сделает ваш другой код намного более читабельным, чем цепочка from_country и for_country. Эти методы не очень хорошо объясняют себя.

...