2012-07-18 28 views
0

我有點像catch22情況。attr_accessible <->:as =>:admin <-> db:seed <->

  1. 如果必須保護用戶的'角色'屬性不受質量分配問題的影響,我必須使用attr_accessible並將其排除。
  2. 但是,如果我必須允許管理員設置它,那麼我必須添加:as =>:admin使用assign_attributes。
  3. 但是,如果我必須設置一些默認角色,db:seed將不起作用。

有沒有辦法完成所有三個需求?

謝謝。

回答

0

圍繞集體作業有幾種方法,但我不是他們的忠實粉絲。

例如:

role = Role.new 
role.assign_attributes({...}, :without_protection => true) 
role.save 

我更喜歡使用一塊寶石,我編寫的名爲sudo_attributes,讓你「命令」的權限:

Role.sudo_create(...) 

的API是相同的ActiveRecord的創建和實例化模型。

+0

我安裝了sudo_attributes,現在我可以在我的模型中使用attr_accessible並使用sudo_create!即時我的控制器和seeds.rb,它的一切都很好。我能夠滿足原始問題中的所有3個要求。當我有空閒時間時,我會喜歡偷看你的寶石,看看你是如何做的。謝謝! – bytemonger 2012-07-18 15:00:01

+0

很高興幫助,隨時upvote我的回答:)。該gem實質上是內置Rails方法的包裝,並不需要任何真正的魔法。我發現自己與你的情況很相似,所以我寫了它。 https://github.com/beerlington/sudo_attributes/blob/master/lib/sudo_attributes.rb#L94 – 2012-07-18 17:22:35

+0

非常有趣 - 今天掙扎着,我的控制器更新方法變得非常醜陋,試圖使用attr_accessible角色功能......將絕對檢查你的寶石,但也很好奇核心團隊期望我們做什麼 - 沒有樣本涵蓋更新案例。 – MBHNYC 2013-01-29 19:04:05

相關問題