2017-05-02 2 views
2

J'utilise la bibliothèque Sequel pour un projet personnel, et j'ai des problèmes avec les jointures en particulier. J'ai besoin de récupérer l'adresse complète d'un client, qui est composé de ville + quartier. L'adresse est divisée entre deux tables/modèles, Neighborhood et City.Puis-je exécuter une jointure à partir d'une suite Modèle?

Fondamentalement, j'ai les modèles suivants:

  • client
  • Ville
  • Quartier

Mon modèle client est comme ceci:

class Customer < Sequel::Model 
    many_to_one :city 
    many_to_one :neighborhood 

    def complete_address 
    city = join(:city).select(:city__name) 
    neighborhood = join(:neighborhood).select(:neighborhood__name) 

    "#{city} - #{neighborhood}" 
    end 
end 

class City 
    one_to_many :customers 
end 

class Neighborhood 
    one_to_many :customers 
end 

Les relations sont fonctionne correctement w hen rejoindre comme Customer.join(:city) et Customer.join(:neighborhood). Mais les mêmes jointures ne fonctionnent pas dans mon modèle.

Qu'est-ce que je fais mal?

Répondre

4

Étant donné que vous avez déjà défini vos associations (one_to_many, many_to_one), vous pouvez vous y référer par leur nom.

Par exemple, dans votre classe Customer, vous pouvez obtenir à la ville et le quartier comme:

def complete_address 
    "#{city.name} - #{neighborhood.name}" 
end 

Sequel crée des références en fonction de vos noms de relation, et vous pouvez vous référer aux champs au sein de ces associations _to_one avec la notation par points .

https://github.com/jeremyevans/sequel/blob/master/doc/association_basics.rdoc#methods-added