我正在使用devise和cancan進行用戶身份驗證和權限。我需要爲任何NEW用戶創建一組默認的權限。我不想弄亂設計代碼,所以它應該在我的用戶模型中。什麼是最好的方式來做到這一點。在創建用戶時分配默認權限
確定這裏就是我在我的模型的嘗試:
before_create :setup_permissions
def setup_permissions
permissions = []
@roles = Role.where('subject_id is null and permissions = ?', 'Read')
@roles.each do |role|
permissions << {:role_id => role.id}
end
self.role_assignments_attributes = permissions
end
但上面的代碼給出了一個錯誤。
有趣的是,我運行代碼,在控制檯中逐行建立上面的權限。它會生成正確的數組,如下所示。
permissions = [{:role_id=>15}, {:role_id=>17}, {:role_id=>19}, {:role_id=>21}, {:role_id=>23}, {:role_id=>25}, {:role_id=>27}]
當我在模型中的權限陣列直接粘貼建設它,而不是如下圖所示它的工作原理:
def setup_permissions
permissions = [{:role_id=>15}, {:role_id=>17}, {:role_id=>19}, {:role_id=>21}, {:role_id=>23}, {:role_id=>25}, {:role_id=>27}]
@roles = Role.where('subject_id is null and permissions = ?', 'Read')
@roles.each do |role|
permissions << {:role_id => role.id}
end
self.role_assignments_attributes = permissions
end
這是工作,但我得到這個錯誤:NoMethodError在設計:: RegistrationsController#創建 未定義的方法'目標」爲#<的ActiveRecord ::關聯:0x1516ac10> – user1570144
您可以編輯您的問題,包括對相關的堆棧跟蹤?我不知道你的簡短描述。 – Olives