2011-11-29 12 views
7

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 puede conseguir fácilmente este por el simple uso attr_accessor pero en este caso se está pasando en el modelo params a través accepts_nested_attributes_for y por alguna razón los parametros no se están pasando a través de:attr_accessor no accesible en accept_nested_attributes_for

en User.rb tengo

has_many :credit_cards 

    accepts_nested_attributes_for :credit_cards 

en el archivo de vista que 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 nuevo en credit_card.rb que 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 param no parece haber pasado de usuario a tarjeta de crédito a través de accept_nested_attributes_for?

El parámetro que se pasa in:

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

¿Alguien sabe qué se está encendiendo? Does accepts_nested_attributes_for work with attr_accessor?

+0

¿Has probado la depuración en el controlador para ver si el hash params tiene lo que usted piensa que debería? –

+0

hey sí, funciona, si coloco el campo en el modelo principal y lo hago allí. Parece que simplemente no funciona bajo accept_nested, pero seguramente si ese es el caso, entonces otros habrían notado que también – Nick

+0

¿Cómo se ve el hash de params? ¿Podría publicar el hash de params visto por el controlador de usuario? –

Respuesta

4

¡Esto me ha enredado 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 nuevo o al atributo update_attributes del modelo en el controlador.

Por lo que tendrá que añadir a su :credit_card_attributesattr_accessor para permitir que la clave para ser aprobada en.

+0

Si miras el parámetro, creo que debería ser: credit_cards_attributes en lugar de: credit_card_attributes. Si pongo esto en el modelo de tarjeta de crédito, entonces no hace nada, pero si lo agrego al modelo user.rb, ¿se salta toda la devolución de llamada y no agrega una tarjeta de crédito al usuario? ¿Algunas ideas? Increíblemente frustrante ¿no es así? – Nick

+0

Teniendo el mismo problema, ¿puedes mostrar cómo tienes esta configuración ahora? –

Cuestiones relacionadas