2015-01-21 47 views
1

強參數讓我非常困惑。我正在寫一個表單來一次創建多個記錄。他們在PARAMS通過爲屬性的數組:陣列記錄的強參數

{ :appointments => [ { :field1 => 'value1' 
        , :field2 => 'value2' 
        } 
        , # next record 
        ] 
} 

然後在控制,我想這樣做

params[:appointments].each do |a| 
    app = Appointment.create! a 
end 

但我遇到許多麻煩具有較強的參數,形式ForbiddenAttributeErrors。我試過使用appointment_params和白名單屬性,但沒有運氣。我無法找到符合我的用例的任何好文檔。他們都假設記錄數組應該嵌套在某個所有者記錄下面,但這裏不是這種情況。

任何幫助,將不勝感激。

回答

3

除了實際的模型屬性之外,請確保您列出了您的數組。

看起來您已經使用了params.require方法的腳手架版本,並且在更改控制器以處理appointments而不是一次約會數組時更新該方法。

像這樣的東西應該工作:

params.require(:appointment).permit(:field1, :field2, appointments: [:field1, field2]) 

params.require(:appointments).permit(:field1, :field2) 

不知道到底是什麼的夜代碼的其餘部分的樣子,但好像你沒有允許陣列本身,上面的代碼示例試圖列出白名單,我會假定該屬性可能會被命名。

1

如果你只使用屬性創建一個新的記錄Appointment,您可以使用以下

Appointment.create!(params.permit(applications: [:field1, :field2])[:applications]) 

如果你真的想迭代這個數組,你可以做

params[:appointments].each do |a| 
    app = Appointment.create!(a.permit(:field1, :field2)) 
end