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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top