Pregunta

En mi página de pagos hay ciertas variables como Card_Number que quiero pasar de la vista al modelo, pero no quiero almacenarlas en el DB. Por lo general, puedo lograrlo fácilmente simplemente usando ATTR_ACCESOR, pero en este caso el modelo se está pasando en parámetros a través de Acepts_nested_Attributes_For y por alguna razón los parámetros no se están pasando a través de:

en user.rb tengo

  has_many :credit_cards

  accepts_nested_attributes_for :credit_cards

En el archivo de vista tengo un campo de formulario anidado, algo así como:

  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>

Ahora de vuelta en Credit_Card.RB tengo:

attr_accessor :test

before_create :show_me_test_param

private

def show_me_test_param
  raise "#{test}"
end

Ahora lo extraño es que cuando intento guardar un registro, simplemente devuelve una excepción vacía. El parámetro no parece haber pasado de usuario a tarjeta de crédito a través de Acepts_nested_Attributes_For?

El parámetro que se está pasando es:

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

¿Alguien sabe lo que está pasando? ¿Acepts_nested_attributes_ para trabajar con ATTR_ACCESOR?

¿Fue útil?

Solución

¡Esto me ha estropeado varias veces en el pasado! Los parámetros para objetos anidados llegan al controlador con la clave model_name_attributes que se pasa al método New o Update_Attributes del modelo en el controlador.

Entonces tendrás que agregar :credit_card_attributes para usted attr_accessor para permitir que esa clave se pase.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top