Вопрос

На моей странице платежей есть определенные переменные, такие как card_number, которые я хочу перенести из вида к модели, но я не хочу хранить их в БД. Обычно я могу легко достичь этого, просто используя ATTR_ACCSOSOR, но в этом случае модель передается в параметрах через access_nestest_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

Теперь странно то, что когда я пытаюсь сохранить запись, это просто возвращает пустое исключение. PARAM, похоже, не был передан от пользователя к CreditCard через ACCESSITS_NEDEST_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"}}}

Кто -нибудь знает, что происходит? Принимает ли это access_nest_attributes_for работает с ATTR_ACCSOR?

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top