attr_accessor nicht zugänglich in ACCEPT_NEST_ATTRIBUTES_FOR
-
25-10-2019 - |
Frage
Auf meiner Zahlungsseite gibt es bestimmte Variablen wie Card_Number, die ich von der Ansicht zum Modell übergeben möchte, aber ich möchte sie nicht im DB speichern. Ich kann dies normalerweise leicht erreichen, indem ich einfach attr_accessor verwendet, aber in diesem Fall wird das Modell durch ACCECTS_NEST_ATTRIBUTES_FOR in Params übergeben, und aus irgendeinem Grund werden die Parameter nicht übergeben:
in user.rb habe ich
has_many :credit_cards
accepts_nested_attributes_for :credit_cards
In der Ansichtsdatei habe ich ein Feld verschachteltes Formular, so etwas wie:
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>
Jetzt wieder in Credit_card.rb habe ich:
attr_accessor :test
before_create :show_me_test_param
private
def show_me_test_param
raise "#{test}"
end
Jetzt ist das Seltsame, dass wenn ich versuche, einen Datensatz zu speichern, einfach eine leere Ausnahme zurückgibt. Der Param ist nicht von dem Benutzer an die Kreditkarte über ACCECTS_Nested_attributes_FOR weitergegeben?
Der Param wird übergeben ist:
{"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"}}}
Weiß jemand, was los ist? Funktioniert Accept_Nested_attributes_for mit attr_accessor?
Lösung
Das hat mich in der Vergangenheit mehrmals durcheinander gebracht! Parameter für verschachtelte Objekte kommen mit dem Schlüssel zum Controller model_name_attributes
die an die neue Methode für die neue oder update_attributes des Modells im Controller übergeben wird.
Sie müssen also hinzufügen :credit_card_attributes
zu deinem attr_accessor
Damit dieser Schlüssel übergeben werden kann.