2017-02-27 79 views
0

模型類:爲HAS_ONE嵌套屬性許可證PARAMS不施加

class User < ActiveRecord::Base 
    has_one :data, inverse_of: :user 
    accepts_nested_attributes_for :data 
end 

發佈體

{數據:{活性:假},DATA_ATTRIBUTES:{活性:假},暱稱:「尼克「}

Rails日誌

參數:{「data」=> {「active」=> false},「data_attributes」=> {「active」=> false},「nickname」=>「nick」,「id」=>「1」, 「用戶」=> { 「暱稱」=> 「缺口」}}

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(:用戶).permit(:暱稱,DATA_ATTRIBUTES:[:活性] )

<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(一)。數據

nil 

什麼是錯。這是正確的嗎? 什麼需要修復嵌套的數據對象正確創建?

回答

1

我不認爲對於嵌套模型參數,默認情況下將不包裹噸。您可能必須自己將它們包裝在「用戶」鍵下,或者告訴您的控制器明確包含哪些參數。

第一個選項應該由你的表單處理(或者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進一步的細節的東西。

3

數據散列應該是這樣的:

{用戶:{活躍:假},DATA_ATTRIBUTES:{活躍:假},綽號: 「尼克」}

問題是,你的哈希:

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}}