2010-12-15 68 views
0

Étant donné que j'ai le code suivantComment faites-vous un logcal ou en utilisant les résultats de deux ActiveRelation retournant une autre relation

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 

Si je veux des produits fabriqués et distribués en Allemagne, je peux faire la

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

Dans le cas ci-dessus, je peux enchaîner plus de méthodes relationnelles avant de l'assigner aux produits si je le voulais.

Si je veux accéder à tous les produits qui impliquent l'Allemagne, je peux faire ce qui suit

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

Ici je ne peux pas la chaîne plus méthodes relationnelles avant de l'attribuer aux produits depuis le résultat de l'OR est un Array pas ActiveRecord ::Relation. Mes questions sont comment puis-je for_country avec from_country et obtenir un ActiveRecord::Relation à la suite?

Idéalement quelque chose comme le Product.for_country(country).or(Product.from_country(country)) suivant

Répondre

0

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

Je sais que ce n'est pas la réponse exacte à votre question, mais je dirais une autre méthode telle que involving_country qui a utilisé ce « ou » La logique rendre votre autre code beaucoup plus lisible que le chaînage from_country et for_country. Ces méthodes, enchaînées, ne s'expliquent pas vraiment très bien.

+0

Le code n'est qu'un exemple de ce que j'essaie réellement de faire et n'est pas du vrai code. Vous avez raison bien sûr pour l'exemple donner. – Will