2009-09-25 9 views
0

Je suis en cours d'exécution dans un problème avec une forme imbriquée que je suis sûr que devrait être facilement résolu, mais je ne peux pas trouver un moyen de contournerRails 2.3 attributs imbriqués problème

Fondamentalement, j'ai la relation suivante La forme imbriquée fonctionne parfaitement tant que je crée de nouveaux contacts à chaque fois.

Si j'inclue une liste déroulante pour permettre la sélection d'un contact existant dans le formulaire imbriqué, un événement est créé, cependant le contact_id est nul dans la table event_contacts.

Aucun contact est créé, puisque je posterai un champ « id » pour le contact imbriqué .. (c.-à-.new_record? Retourne false.)

Comment puis-je mettre à jour la table event_contacts pour assurer que le « sélectionné «les contacts sont correctement associés?

Voir snipbits ci-dessous ...

modèles

class Event < ActiveRecord::Base 
    belongs_to :user 

    has_many :event_contacts 
    accepts_nested_attributes_for :event_contacts 

    has_many :contacts, :through => :event_contacts 
    accepts_nested_attributes_for :contacts 


class EventContact < ActiveRecord::Base 
    belongs_to :event 
    belongs_to :contact 

    accepts_nested_attributes_for :contact 


class Contact < ActiveRecord::Base 
    belongs_to :user 

    has_many :event _contacts 
    has_many :events, :through => :event_contacts 

Voir

- fields_for(@event) do |f| 
    - f.fields_for :event_contacts do |rc| 
    - rc.fields_for :contact do |c| 
     = c.collection_select :id, Contact.all, :id, :name, { :selected => @contact.id || 0 } 

     = c.hidden_field :user_id, :value => @current_user.id 
     = c.text_field :first_name 
      = c.text_field :email 
+1

Pouvez-vous coller l'extrait associé à cette situation? – khelll

+0

Salut ont ajouté le modèle et afficher le code pour décrire ce que je fais – Dom

Répondre

0

Avez-vous inclus le accepts_nested_attributes en vous modèle?

+0

oui, ont inclus cela dans le modèle parent (événement) et le modèle de jointure aussi (event_contact) – Dom

+0

Pourquoi utilisez-vous un modèle séparé? Vous pouvez utiliser une relation hbtm et supprimer ce modèle (evencontact) – Lichtamberg

+0

souhaitez stocker plus d'informations dans le modèle de jointure qui ne correspond ni à l'événement ni au modèle de contact – Dom

0

Pas tout à fait la réponse que je cherchais .. mais ai piraté mon chemin autour de cela en utilisant une méthode post save dans le contrôleur parent (événement) et en vérifiant les objets enfants pour inspecter si le contact était nouveau ou existant.

mettre à jour puis les event_contacts de table intemediary manuellement ...

pas la solution la plus élégante, mais il fonctionne et me permet de passer ...

serait encore apprécier des indications quant à la façon de faire ce chemin de rails ..

0

Je ne suis pas très sûr à ce sujet, mais pouvez-vous vérifier votre version de Rails? Un bug lié à accepts_nested_attributes_for a été corrigé dans 2.3.10.

Questions connexes