2011-11-29 17 views
7

Na stronie moich płatności znajdują się pewne zmienne, takie jak numer_artykułu, który chcę przekazać z widoku do modelu, ale nie chcę przechowywać ich w bazie danych. Zwykle mogę łatwo osiągnąć to po prostu za pomocą attr_accessor ale w tym przypadku model jest przekazywana w params poprzez accepts_nested_attributes_for iz jakiegoś powodu params nie są przekazywane poprzez:attr_accessor nie jest dostępny w accept_nested_attributes_for

w User.rb mam

has_many :credit_cards 

    accepts_nested_attributes_for :credit_cards 

w pliku widoku mam zagnieżdżonych pole formularza, coś jak:

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> 

teraz z powrotem w credit_card.rb mam:

attr_accessor :test 

before_create :show_me_test_param 

private 

def show_me_test_param 
    raise "#{test}" 
end 

Dziwne jest to, że kiedy próbuję zapisać rekord, po prostu zwraca pusty wyjątek. Wydaje się, że param nie przeszedł od użytkownika do karty kredytowej za pośrednictwem accepts_nested_attributes_for?

param były przekazywane w języku:

{"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"}}} 

Czy ktoś wie co się dzieje? Czy accept_nested_attributes_for pracy z attr_accessor?

+0

Czy próbowałeś debugowania w sterowniku, czy hash params ma co myślisz powinien? –

+0

hej, tak, mam, działa, jeśli umieszczę pole na modelu nadrzędnym i tam to zrobię. Wydaje się, że po prostu nie działa pod accepts_nested, ale na pewno, gdyby tak było, inni też by to zauważyli. – Nick

+0

Jak wygląda hash params? Czy mógłbyś opublikować hash params widziany przez kontroler użytkownika? –

Odpowiedz

4

To zawiodło mnie kilka razy w przeszłości! Parametry dla obiektów zagnieżdżonych przychodzą do kontrolera z kluczem model_name_attributes, który jest przekazywany do nowej lub zaktualizowanej metody atrybutów modelu w kontrolerze.

Więc trzeba dodać :credit_card_attributes do attr_accessor, aby umożliwić, że kluczem do być przekazany.

+0

Jeśli spojrzysz na param, myślę, że powinno to być: credit_cards_attributes, a nie: credit_card_attributes. Jeśli umieściłem to w modelu karty kredytowej, to nie robi nic, ale jeśli dodaję go do modelu user.rb, to pomija cały callback i nie dodaje karty kredytowej do użytkownika !? Jakieś pomysły? Niezwykle frustrujące nie jest to – Nick

+0

Po ten sam problem, możesz pokazać, jak masz to config'd teraz? –

Powiązane problemy