【问题标题】:How to access form_for nested attributes on controller after form submit?表单提交后如何访问控制器上的 form_for 嵌套属性?
【发布时间】:2019-09-08 07:41:39
【问题描述】:

我需要访问 fields_for 嵌套属性,但我不断收到此错误:

undefined method '[]' for nil:NilClass

对于线路:

braintree_account_params[:braintree_subscription_attributes][0][:plan_token]

我试过了:

params[:braintree_subscription_attributes][0][:plan_token]
params["braintree_subscription_attributes"][0]["plan_token"]
braintree_account_params[:braintree_subscription_attributes][0][:plan_token]
braintree_account_params["braintree_subscription_attributes"][0]["plan_token"]

params[:braintree_subscription_attributes]['0'][:plan_token]
params["braintree_subscription_attributes"]['0']["plan_token"]
braintree_account_params[:braintree_subscription_attributes]['0'][:plan_token]
braintree_account_params["braintree_subscription_attributes"]['0']["plan_token"]

没有一个有效

这个: params[:braintree_account][:braintree_subscription_attributes].first[:plan_token]

错误:Undefined method first # for ActionController

我的参数:

Parameters: {"utf8"=>"✓", "braintree_account"=>{"first_name"=>"asfd", "last_name"=>"asfd", "braintree_subscription_attributes"=>{"plan_token"=>"4zfr"}}, "user_id"=>"1"}

强参数:

params.require(:braintree_account).permit(..., braintree_subscription_attributes: [:id, :plan_token])

型号:

class BraintreeAccount < ApplicationRecord
  has_one :braintree_subscription
  accepts_nested_attributes_for :braintree_subscription
end

class BraintreeSubscription < ApplicationRecord
  belongs_to :braintree_account
end

如何访问plan_token?

【问题讨论】:

  • 请提供您的完整控制器代码,因为解决方案就在那里。
  • 您发布的params,这就是您应该使用/调查以找到如何访问已发布的braintree_subscription。然后,此外:确保您的强参数不会阻止必填字段(但这似乎没问题)。

标签: ruby-on-rails ruby


【解决方案1】:

因为这是一个有一个,而不是一个有多个,所以您的属性中不会有超过 1 个嵌套对象。仅当预计有 1 个以上的孩子时,才需要使用数组语法。

braintree_account_params[:braintree_subscription_attributes][:plan_token]

【讨论】:

  • 也很容易根据发布的参数进行验证,恕我直言,这是正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-13
相关资源
最近更新 更多