5

Attualmente, un Articolobelongs_to un società e has_manyItemVariants.plurale per l'associazione has_many fields_for non mostrando in vista

Sto cercando di utilizzare campi nidificati per aggiungere campi ItemVariant tramite il modulo Articolo, tuttavia utilizzando: item_variants non visualizza il modulo. Viene visualizzato solo quando utilizzo il singolare.

Ho controllato le mie associazioni e sembrano corrette, potrebbe avere qualcosa a che fare con l'elemento che viene annidato sotto Company, o mi manca qualcos'altro?

Grazie in anticipo.

Nota: il codice non pertinente è stato omesso dai frammenti di seguito.

MODIFICA: Non so se questo è rilevante, ma sto utilizzando CanCan per l'autenticazione.

routes.rb

resources :companies do 
    resources :items 
end 

item.rb

class Item < ActiveRecord::Base 
    attr_accessible :name, :sku, :item_type, :comments, :item_variants_attributes 


    # Associations 
    #----------------------------------------------------------------------- 
    belongs_to :company 
    belongs_to :item_type 
    has_many :item_variants 

    accepts_nested_attributes_for :item_variants, allow_destroy: true 

end 

item_variant.rb

class ItemVariant < ActiveRecord::Base 
    attr_accessible :item_id, :location_id 

    # Associations 
    #----------------------------------------------------------------------- 
    belongs_to :item 

end 

voce/new.html.erb

<%= form_for [@company, @item] do |f| %> 
    ... 
    ... 
    <%= f.fields_for :item_variants do |builder| %> 
    <fieldset> 
     <%= builder.label :location_id %> 
     <%= builder.collection_select :location_id, @company.locations.order(:name), :id, :name, :include_blank => true %> 
    </fieldset> 
    <% end %> 
    ... 
    ... 
<% end %> 

risposta

6

Si dovrebbe precompilare @item.item_variants con alcuni dati:

def new # in the ItemController 
    ... 
    @item = Item.new 
    3.times { @item.item_variants.build } 
    ... 
end 

Fonte: http://rubysource.com/complex-rails-forms-with-nested-attributes/

+1

Grazie! Funzionava perfettamente, ma come riferimento stavo usando RailsCast ep 196-Nested-model-form-revised. Nella sua nuova azione conteneva solo '@survey = Survey.new' senza alcuna costruzione dell'associazione. Qualche idea del motivo per cui ho bisogno di costruire l'associazione e Ryan no/no? – 8bithero

+1

Questo railscast è ancora migliore, anche se complesso, perché può aggiungere dinamicamente domande nel modulo di sondaggio. Quindi non ha bisogno di prepopolare nulla. – rewritten

+0

Volevo solo aggiungere un significato per quelli che sono confusi riguardo al .build e perché Ryans non ne aveva bisogno. Se si guarda il suo codice in appliation_helper alla riga 3, si crea l'istanza della classe. Quindi questo prende il posto di .build. Spero che questo aiuti qualcun altro là fuori! –

2

provare in questo modo

nel vostro item controllernew action scrittura

def new 
    ... 
    @item = # define item here 
    @item.item_variants.build if @item.item_variants.nil? 
    ... 
end 

e in item/new.html.erb

<%= form_for @item do |f| %> 
    ... 
    ... 
    <%= f.fields_for :item_variants do |builder| %> 
    ... 
    <% end %> 
    ... 
    ... 
<% end %> 

per piu Vedere i video - Nested Model Form

+0

Grazie. Ho funzionato, ma usando '@item.item_variants.build se @ item.item_variants.nil? 'Non ha funzionato. Funziona solo se rimuovo la dichiarazione if. Inoltre, l'uso di quella versione riveduta del tuo collegamento era ciò che mi confondeva. Nel suo controller non usa .build. Crea solo l'istanza @survey. Qualche idea del motivo per cui ho bisogno di costruire l'associazione e Ryan no/no? – 8bithero

Problemi correlati