2016-08-02 2 views
0

J'ai deux tables: offres et tests.Pouvons-nous avoir plusieurs tables de jointure pour la même paire de tables?

Mais j'ai besoin de trois tables de jointure comme, offers_tests_1, offers_tests_2 et offers_tests_3. C'est en raison d'une exigence de l'entreprise qu'une offre peut avoir trois combinaisons (paquets) de tests.

Pouvons-nous le faire dans Rails? Pour une table jointe, je pourrais le faire en utilisant l'association has_and_belongs_to_many dans les modèles avec la balise f.collection_select dans la vue, avec: multiple => true. Dans le pire des cas, j'ai pu configurer trois tables tests_1, tests_2 et tests_3 avec les mêmes données. Je veux éviter cela.

Répondre

0

Oui vous pouvez Vous pouvez le faire dans le modèle lorsque vous définissez vos relations. Comme ça.

Dans le modèle Offer.rb

has_many :offers_tests_1 
has_many :offers_tests_2 
has_many :tests, through: :offers_tests_1 
has_many :tests, through: :offers_test_2 

dans le modèle Tests.rb

has_many :offers_tests_1 
has_many :offers_tests_2 
has_many :offers, through: :offers_tests_1 
has_many :offers, through: :offers_test_2 

profiter

+0

Je vais avec cette approche, mais la vue est encore un problème. J'ai ce qui suit - '<% = form_for (@offer) do | f | %> <% = f.fields_for: offers_tests_1 do | ot | %> <% = ot.collection_select (: test_id, Test.all,: id,: la propriété, {include_hidden: false},: multiple => true)%> <% end %> <% end %> ' L'erreur que j'ai est - - Le champ n'a pas de valeur par défaut – user1575148

+0

not fields_for: offers_tests_1 use fields_for: tests –

+0

Où puis-je spécifier l'association dans collection_select? J'ai trois associations et trois tables de jointure. Si j'utilise fields_for: tests, Rails insère des données dans la troisième table de jointure. – user1575148