2013-07-07 52 views
9

假設用戶模型 將Rails4與strong_parameters結合使用。嵌套屬性的強參數在空數組時返回「未經許可的參數」

class User < ActiveRecord::Base 
    has_secure_password 

accepts_nested_attributes_for :identity 

// rest of code omitted for brevity 
end 

如果我指的是導遊,我應該能夠做到

def user_params 
    params.require(:user).permit(:email, identity_attributes: []) 
end 

讓每個identity_attributes不論其名稱或號碼的mass_assignment。但這種運行在一個「不允許的參數:identity_attributes」

但是,如果我指定的identity_attributes它的工作原理

def user_params 
    params.require(:user).permit(:email, identity_attributes: [:last_name, :first_name]) 
end 

我有身份的許多屬性,我將能夠通過用戶來mass_assign他們沒有指定所有的他們。

我錯過了什麼嗎?這是一個錯誤嗎?

乾杯

回答

21

你必須指定要更新的身份的屬性,包括:標識實體的ID。

你會有這樣的事情:

def user_params 
    params.require(:user).permit(:email, identity_attributes: [:id, :last_name, :first_name]) 
end 

如果不指定:ID,Rails會嘗試,而不是創造更新它的實體。我使用accept_nested_attributes_for花費了所有周末的簡單一對多關係,因爲我沒有在允許的屬性中指定id。

+0

感謝你是正確的,當你有一個一對多的關係(似乎是合乎邏輯的指定'很多部分'中的哪個對象應該更新),但似乎並非如此,1對1關係(沒有指定identity.id,它工作正常)。問題是關於在嵌套屬性是空數組的文檔中提供的示例^ _ ^(並且這種方法在我看到的情況下不起作用) – phron

+0

OOps今天上午重新嘗試,即使對於1到-1關係...如果沒有提供嵌套的對象ID,它似乎刪除原始記錄並重新創建一個新的而不是更新現有的(!!)。當strong_parameters和nested_attributes !!!文檔不是很清楚! Ĥave揮動乾杯 – phron

+0

@ d34n5你是偉大的:)。但我想知道爲什麼mongoid在文檔中錯過了這件重要的事情。 –