2017-08-15 3 views
0

J'ai donc deux tables, une table Customers et une table Companies. J'ai également créé une table Employés vide que je voudrais utiliser comme table de jointure.Rails remplissent la table de jointure existante

Ce sont les associations que j'ai: (Je veux des clients à associer à leur entreprise respective)

class Company < ApplicationRecord 
    has_many :employees 
    has_many :customers, :through => :employees 
end 

class Customer < ApplicationRecord 
    belongs_to :employees 
end 

class Employee < ApplicationRecord 
    belongs_to :customer 
    belongs_to :company 
end 

Où serait la meilleure façon de le faire? Dans mon client # nouvelle méthode dans le contrôleur? J'ai lu que je dois utiliser < <, mais je ne sais pas comment aborder cela.

+0

Est-ce un 'customer' appartiennent ou ont beaucoup' employees'? Un «employé» appartient-il ou a-t-il un «client»? Pour l'instant, vous avez 'belongs_to' dans les deux directions –

Répondre

1

Vous devez utiliser le concept d'association inverse ici: classe has_many Client: entreprises,: => par: employés

+0

Ai-je besoin d'ajouter les colonnes column_id et company_id via une migration ou le fera-t-il automatiquement? –

+1

Vous aurez toujours besoin d'ajouter des colonnes dans votre table de jointure (employés dans votre cas). Les migrations sont toujours nécessaires pour sauvegarder vos assossiations ActiveRecord. –

+0

Merci beaucoup. Je suis en train d'apprendre Rails et j'essaie de faire des relations db plus «complexes». Tu as beaucoup aidé. –

0

Vous pouvez juste essayer de déléguer l'appel de la société sur les clients à leurs employés:

customer.rb

delegate :company, to: :employee 

Maintenant, chaque fois que vous demandez à un client de sa société, il demandera à son employé de gérer.