attr_accessor недоступен в accept_nested_attributes_for - PullRequest
7 голосов
/ 29 ноября 2011

На моей странице платежей есть определенные переменные, такие как номер_карты, которые я хочу передать из представления в модель, но не хочу хранить их в БД.Обычно я легко могу добиться этого, просто используя attr_accessor, но в этом случае модель передается в параметрах через accepts_nested_attributes_for и по какой-то причине параметры не передаются:

в User.rb у меня есть

  has_many :credit_cards

  accepts_nested_attributes_for :credit_cards

в файле представления у меня есть вложенное поле формы, что-то вроде:

  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>

теперь обратно в credit_card.rb у меня есть:

attr_accessor :test

before_create :show_me_test_param

private

def show_me_test_param
  raise "#{test}"
end

Теперь странноДело в том, что когда я пытаюсь сохранить запись, она просто возвращает пустое исключение.Похоже, что параметр не был передан от пользователя к кредитной карте через acceptpts_nested_attributes_for?

Передаваемый параметр:

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

Кто-нибудь знает, что происходит?Accept_nested_attributes_for работает с attr_accessor?

1 Ответ

4 голосов
/ 30 ноября 2011

Это меня несколько раз напутало в прошлом! Параметры для вложенных объектов поступают в контроллер с ключом model_name_attributes, который передается методу new или update_attributes модели в контроллере.

Так что вам нужно добавить :credit_card_attributes к вашему attr_accessor, чтобы разрешить передачу этого ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...