模特课:
class User < ActiveRecord::Base
has_one :data, inverse_of: :user
accepts_nested_attributes_for :data
end
发表正文
{data:{active:false},data_attributes:{active:false},昵称:&#34; nick&#34;}
Rails Log
参数:{&#34;数据&#34; =&gt; {&#34;有效&#34; =&gt; false},&#34; data_attributes&#34; =&gt; {&#34;有效&# 34; =&gt; false},&#34;昵称&#34; =&gt;&#34;昵称&#34;,&#34; id&#34; =&gt;&#34; 1&#34;,&# 34;用户&#34; = GT; {&#34;昵称&#34; = GT;&#34;缺口&#34;}}
PARAMS:
<ActionController::Parameters {"data"=>{"active"=>false}, "data_attributes"=>{"active"=>false}, "nickname"=>"nick", "controller"=>"api/users", "action"=>"update", "id"=>"1", "user"=>{"nickname"=>"nick"}} permitted: false>
params.require(:user).permit(:nickname,data_attributes:[:active])
<ActionController::Parameters {"nickname"=>"nick"} permitted: true>
User.new(a)中
#<User id: nil, provider: "email", uid: "", name: nil, nickname: "nick", image: nil, email: nil, created_at: nil, updated_at: nil>
User.new(a)中。数据
nil
出了什么问题。是对的beahaviour? 需要正确修复嵌套数据对象的是什么?
答案 0 :(得分:3)
数据哈希应该是这样的:
{user:{active:false},data_attributes:{active:false},昵称:&#34; nick&#34;}
问题是你的哈希是:
Parameters: {"data"=>{"active"=>false}, "data_attributes"=>{"active"=>false}, "nickname"=>"nick", "id"=>"1", "user"=>{"nickname"=>"nick"}}
应该是:
Parameters: {"user"=>{"nickname"=>"nick", "id"=>"1","data_attributes"=>{"active"=>false}}
答案 1 :(得分:1)
我不认为嵌套模型的参数默认是包装的。您可能需要自己将它们包装在“user”键下,或者告诉控制器它应该明确包装哪些参数。
第一个选项应该由您的表单(或JS库,如果您正在执行AJAX请求)处理。
第二种选择是
class UsersController < ApplicationController
wrap_parameters :user, include: [:data_attributes]
def create
# now you can access params[:user][:data_attributes]
end
end
有关详细信息,请参阅ActionController::ParamsWrapper和此Rails issue上的文档。