attr_accessor pas accessible à accept_nested_attributes_for
-
25-10-2019 - |
Question
Sur ma page de paiement il y a certaines variables telles que card_number que je veux passer de la vue du modèle, mais je ne veux pas les stocker dans la db. Je peux habituellement obtenir facilement cela en utilisant simplement attr_accessor mais dans ce cas, le modèle est passé à travers params accepts_nested_attributes_for et pour une raison quelconque les params ne sont pas passés par:
User.rb j'ai
has_many :credit_cards
accepts_nested_attributes_for :credit_cards
dans le fichier de vue que j'ai un champ de formulaire imbriqué, quelque chose comme:
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>
maintenant de retour dans credit_card.rb j'ai:
attr_accessor :test
before_create :show_me_test_param
private
def show_me_test_param
raise "#{test}"
end
Maintenant, la chose étrange est que lorsque je tente de sauvegarder un enregistrement, il retourne simplement une exception vide. PARAM ne semble pas avoir été passé à travers d'un utilisateur à CreditCard par accepts_nested_attributes_for?
Le param étant transmis est:
{"email"=>"name@example.com", "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"}}}
Quelqu'un sait ce qui se passe? Est-ce que accepts_nested_attributes_for travail avec attr_accessor?
La solution
Cela m'a foiré plusieurs fois dans le passé! Params pour les objets imbriqués viennent au contrôleur avec le model_name_attributes
clé qui se transmet à la méthode nouvelle ou update_attributes du modèle dans le contrôleur.
Vous devrez ajouter à votre :credit_card_attributes
attr_accessor
pour permettre cette clé soit transmise.