2012-05-04 4 views
0

J'ai le formulaire suivant pour publication, avec les champs pour les pistes qui sont acceptés comme attributs imbriqués dans mon modèle de version.Accès aux attributs enfants imbriqués dans le modèle parent?

<%= form_for(@release) do |f| %> 
<%= f.hidden_field :user_id, :value => current_user.id, :class => "text" %> 
<%= f.text_field :title, :class => "text" %> 

<%= f.fields_for :tracks do |builder| %> 
<%= render 'track_fields', :f => builder %> 
<% end %> 

<% end %> 

Mon modèle de libération contient:

accepts_nested_attributes_for :tracks, :reject_if => lambda { |a| a[:name].blank? }, :allow_destroy => :true 
    accepts_nested_attributes_for :releases_tracks 

    before_save :order_tracks 
    before_update :order_tracks 


    def order_tracks 
    releases_tracks.each { |t| t.position = track_attributes.position } 
    tracks.each { |t| t.user_id = user_id} 
    tracks.each { |t| t.label_id = label_id} 
    end 

    def track_attributes=(track_attributes) 
    track_attributes.each do |attributes| 
    tracks.build(attributes) 
    artists_tracks.build(attributes) 
    end 
    end 

Tout fonctionne bien, sauf la ligne ci-dessous où je suis en train de prendre la valeur de position entrée dans la partie fields_for du formulaire. Je peux accéder aux valeurs du formulaire parent, user_id par exemple, mais comment accéder aux valeurs enfant?

releases_tracks.each { |t| t.position = track_attributes.position } 

Merci à tous!

(Note: Je ne veux pas utiliser acts_as_list pour cela)

Répondre

0

essayer d'utiliser:

releases_tracks.each { |t| t.position = track_attributes[:position] } or 
releases_tracks.each { |t| t.position = track_attributes["position"] } 
+0

Hmmmm, il n'aime pas la partie de track_attributes, je reçois une variable locale ou non définie méthode 'track_attributes'error. Je peux définir la position à 1 en utilisant ceci: releases_tracks.each {| t | t.position = pistes [1]} alors je me demande si j'ai besoin d'une variation à ce sujet? – Raoot

Questions connexes