2010-05-15 26 views
1

J'ai un has_many de base par rapport:Howto: Accès à un second modèle connexe dans un bloc de constructeur d'attribut imbriqué

class Foo < ActiveRecord::Base 
    has_many :bars, :dependent => :destroy 
    has_many :wtfs :through => :bars 

    accepts_nested_attributes_for :bars, :wtfs 
end 

Sur mes formes crud j'ai un bloc constructeur pour le wtf, mais je dois l'étiquette viennent de la barre (un attribut appelé label par exemple). Quelle est la bonne méthode pour le faire?

est ici l'échafaud le plus simple:

<h1>New foo</h1> 

<% form_for(@foo) do |f| %> 
    <%= f.error_messages %> 

    <p> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    </p> 

    <h2>Bars</h2> 
    <% f.fields_for :wtfs do |builder| %> 
    <%= builder.hidden_field :bar_id %> 
    <p> 
    <%= builder.text_field :wtf_data_i_need_to_set %> 
    </p> 
    <% end %> 

    <p> 
    <%= f.submit 'Create' %> 
    </p> 
<% end %> 

<%= link_to 'Back', foos_path %> 

Répondre

1

La réponse a été trouvée dans l'analyse de la façon dont les rails FormBuilder fonctionne. Donc, dans l'exemple ci-dessus où j'ai besoin d'accéder à l'objet wtf réel afin que je puisse obtenir une propriété sur la barre, je dois faire ce qui suit:

<h2>Bars</h2> 
    <% f.fields_for :wtfs do |builder| %> 
    <%= builder.hidden_field :bar_id %> 
    <p> 
    <%= builder.label builder.object.bar.data_i_need_for_a_label %> 
    <%= builder.text_field :wtf_data_i_need_to_set %> 
    </p> 
    <% end %>