访问者无法在接受访问

在我的付款页面上,有一些变量,比如我想从视图传递给模型的card_number,但我不想将它们存储在数据库中。 我通常可以简单地通过简单地使用attr_accessor来实现,但在这种情况下,模型将通过参数accept_nested_attributes_for传递给params,并且由于某些原因参数不能传递:

在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

现在奇怪的是,当我试图保存一条记录时,它只是返回一个空的异常。 该参数似乎没有通过accept_nested_attributes_for从用户传递给CreditCard?

传入的参数是:

{"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一起使用吗?


这在过去几次让我感到困惑! 嵌套对象的参数通过关键字model_name_attributes进入控制器,该关键字被传递给控制器​​中model_name_attributes的new或update_attributes方法。

因此,您需要将:credit_card_attributes添加到您的attr_accessor以允许传入该密钥。

链接地址: http://www.djcxy.com/p/56463.html

上一篇: accessor not accessible in accept

下一篇: What is the best way to mock a 3rd party object in ruby?