3

也許我做錯了,但這裏是我的問題:Rails的協會不能大規模分配外鍵

@restaurant = current_user.restaurants.build(params[:restaurant]) 

這建立在USER_ID被設置爲current_user.id一家新餐廳的對象。這隻適用於在餐廳模型中設置attr_accessible :user_id。如果不是你得到一個

ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes: 
user_id 

我想是有通過.build定義user_id,但在同一時間,我不想attr_accessible :user_id因爲那是可能有人這樣記錄的USER_ID設置一些其他用戶的ID,這將是不好的!

我以爲外鍵被排除在這個質量安全保障之外,並且如果您通過關聯.build.create方法創建一個新對象,則會執行該外鍵。

有什麼建議嗎?我不想因爲那種失敗的.build

+0

你確定你的params中沒有'id'嗎? – apneadiving 2011-12-23 13:47:08

+0

是的!在參數散列中沒有標識 – patrickdet 2011-12-23 13:51:59

+1

您使用的是Rails 3.2.0.rc1嗎?這是一個知道的bug https://github.com/rails/rails/issues/4051(已解決) – Damien 2011-12-23 13:56:55

回答

3

宗旨是你使用Rails 3.2.0.rc1回去

@restaurant = current_user.restaurants.build(params[:restaurant]) 
@restaurant.user = current_user 

?這是一個知道的bug github.com/rails/rails/issues/4051(已解決)