【发布时间】:2014-03-19 12:37:45
【问题描述】:
与 simple_form 的嵌套 has_many 关联返回以下参数哈希:
params
# => {
"user"=>{
"first_name"=>"John",
"last_name"=>"Doe",
"bank_accounts_attributes"=>{
"-1"=>{
"_destroy"=>"0",
"iban"=>"fakeiban",
"bic"=>"fakebic"
},
"new-bank-account"=>{
"_destroy"=>"0",
"iban"=>"",
"bic"=>""
}
}
}
}
键“-1”是通过复制 DOM 中的“new-bank-account”模板(由于 iban 为空白而被忽略)创建的新的尚未持久化的 bank_accout。
我如何允许这些用于强参数?
我尝试了以下方法无济于事:
permitted_params = {
:first_name,
:last_name,
{
:bank_accounts_attributes=>[:iban, :bic]
}
}
params.require(:user).permit(*permitted_params)
Unpermitted parameters: -1, new-bank-account
# => {
"user"=>{
"first_name"=>"John",
"last_name"=>"Doe",
"bank_accounts_attributes"=>{}
}
}
我在这里做错了什么?
更新:
以下工作,但我不想在任何地方明确地包含否定键(代表未持久关系):
params.require(:user).permit(:first_name, :last_name, bank_accounts_attributes: {"-1" => [:iban, :bic]})
更新 2:
问题似乎是“新银行帐户”键:
p = ActionController::Parameters.new user: { first_name: "Foo", bank_accounts_attributes: {"-1" => {iban: 'xxx'}, "-2" => {iban: 'yyy'}}}
p.require(:user).permit(:first_name, bank_accounts_attributes: :iban)
# => {"first_name"=>"Foo", "bank_accounts_attributes"=>{"-1"=>{"iban"=>"xxx"}, "-2"=>{"iban"=>"yyy"}}}
p = ActionController::Parameters.new user: { first_name: "Foo", bank_accounts_attributes: {"-1" => {iban: 'xxx'}, "new-bank-account" => {iban: 'yyy'}}}
p.require(:user).permit(:first_name, bank_accounts_attributes: :iban)
# => {"first_name"=>"Foo", "bank_accounts_attributes"=>{}}
看来我必须在提交表单之前从 DOM 中删除模板“new-bank-account”。
【问题讨论】:
-
你的用户模型中有 'accepts_nested_attributes_for :bank_accounts' 吗?
-
是的,我正在升级到 Rails 4,这适用于 Rails 3。
标签: ruby-on-rails strong-parameters