2014-09-25 53 views
0

不能在任何地方找到接受的方式而不需要通過控制器考慮到attr_accissible不再支持創建模型的模型。如何創建無控制器考慮rails4強參數

是下面的方法正確嗎?

在我的舊代碼

ModelName.create(course_id:680, user_id:25) 

新的代碼(現在我已經刪除attr_accessible引發mass_assignment錯誤):

model = ModelName.new.tap do |m| 
    m.course_id = 680 
    m.user_id = 25 
end 
model.save! 

(的作品,但看起來哈克)

Apparently,下面會不會因爲without_protec工作重刑選項在Rails4去除

ModelName.create({course_id: 680, user_id: User.first.id}, without_protection: true) 

感謝this question我讀過有關強參數的控制器之外使用「 - link但即便我的從我的控制檯以下:

raw_params = {course_id: Course.last.id, user_id: User.first.id} 
parameters = ActionController::Parameters.new(raw_params) 
ModelName.create(parameters.permit(:course_id, :user_id)) 

我得到錯誤

WARN -- : WARNING: Can't mass-assign protected attributes for ModelName: course_id, user_id 
+0

如果您的模型的屬性的大規模分配是可選的,您可以通過在您的環境/開發中將此行'config.active_record.mass_assignment_sanitizer =:strict'更改爲'config.active_record.mass_assignment_sanitizer =:logger'來避免此類情況。 RB文件 – anusha 2014-09-26 03:00:04

回答

0

我讀this question更仔細,發現我的答案

我不得不添加

config.active_record.whitelist_attributes = false 

我的環境(開發/測試/ production.rb),也許是因爲我還有安裝了protected_attributes寶石。

所以現在我可以高興地用

ModelName.create(course_id:680, user_id:25) 

畢竟。

我意識到這個問題/答案是上述問題的重複有點的 - 但我沒有找到這個問題有點棘手理解,所以除非問我會不會降重視這個問題。