2011-11-29 14 views
7

Nella pagina dei miei pagamenti ci sono alcune variabili come card_number che voglio passare dalla vista al modello ma non voglio memorizzarle nel db. Posso solito facilmente raggiungere questo semplicemente usando attr_accessor ma in questo caso il modello viene passato in params attraverso accepts_nested_attributes_for e per qualche motivo i params non vengono passati attraverso:attr_accessor non accessibile in accept_nested_attributes_for

in User.rb ho

has_many :credit_cards 

    accepts_nested_attributes_for :credit_cards 

nel file vista Ho un campo formato nidificato, qualcosa come:

blah blah 
    <h2>Credit card</h2> 
    <%= f.fields_for :credit_cards do |builder| %> 
    <%= render "credit_card_fields", :f => builder %> 
    <% end %> 

    inside that 
    <p> 
    <%= f.label :test %><br /> 
    <%= f.text_field :test %> 
    </p> 

ora di nuovo in credit_card.rb ho:

attr_accessor :test 

before_create :show_me_test_param 

private 

def show_me_test_param 
    raise "#{test}" 
end 

Ora la cosa strana è che quando provo a salvare un record, restituisce semplicemente un'eccezione vuota. Il param non sembra essere passato da User a CreditCard attraverso accept_nested_attributes_for?

Il param viene passata in è:

{"email"=>"[email protected]", "password"=>"pass123", "password_confirmation"=>"pass123", "credit_cards_attributes"=>{"0"=>{"test"=>"helllo this is the second attempt", "name_on_card"=>"first lastname", "card_number"=>"987498742897", "card_verification_value"=>"232", "expiry_date"=>"2141"}}} 

Qualcuno sa che cosa sta succedendo? Accept_nested_attributes_for funziona con attr_accessor?

+0

Hai provato il debug nel controller per vedere se l'hash params è quello che si pensa che dovrebbe? –

+0

hey sì, ho funzionato se posto il campo sul modello principale e lo faccio lì. Sembra che semplicemente non funzioni sotto accept_nested ma sicuramente se questo è il caso allora altri avrebbero notato che anche – Nick

+0

Che aspetto ha l'hash params? Potresti per favore pubblicare l'hash dei parametri come visto dal controller utente? –

risposta

4

Questo mi ha incasinato più volte in passato! I parametri per gli oggetti nidificati vengono inviati al controller con la chiave model_name_attributes che viene passata al metodo new o update_attributes del modello nel controller.

Quindi è necessario aggiungere al vostro :credit_card_attributesattr_accessor per consentire che la chiave per essere passato in.

+0

Se si guarda il parametro, penso che dovrebbe essere: credit_cards_attributes anziché: credit_card_attributes. Se metto questo nel modello di carta di credito, allora non fa nulla ma se lo aggiungo al modello user.rb, salta l'intera callback e non aggiunge una carta di credito all'utente !? Qualche idea? Incredibilmente frustrante, non lo è – Nick

+0

Avendo lo stesso problema, puoi mostrare come lo hai config'd adesso? –

Problemi correlati