0
我使用Railscasts 189的代碼來實現Devise角色,因此我可以使用Cancan。但角色不會保存到role_mask字段。從我的用戶模型相關代碼:Rails 3:role_mask不會保存 - 警告:無法批量分配受保護的屬性:角色
attr_accessible :email, :password, :password_confirmation, :remember_me,
:name, :about, :awards, :url, :roles_mask
ROLES = %w[admin support worker monitor visitor]
named_scope :with_role, lambda { |role| {:conditions => "roles_mask & #{2**ROLES.index(role.to_s)} > 0"} }
def roles=(roles)
self.roles_mask = (roles & ROLES).map { |r| 2**ROLES.index(r) }.sum
end
def roles
ROLES.reject { |r| ((roles_mask || 0) & 2**ROLES.index(r)).zero? }
end
def role_symbols
roles.map(&:to_sym)
end
在用戶的「新」和「編輯」的意見,我有以下的,以示對角色的複選框:
<p>
<%= f.label :roles %><br />
<% for role in User::ROLES %>
<%= check_box_tag "user[roles][]", role, @user.roles.include?(role) %>
<%=h role.humanize %><br />
<% end %>
<%= hidden_field_tag "user[roles][]", "" %>
</p>
當我檢查的複選框一對夫婦的角色並點擊「提交」,我得到以下閃光燈: 1錯誤禁止被保存在這個用戶:
我從服務器收到以下錯誤: 警告:不能質量 - 分配受保護的屬性:角色
我檢查了數據庫,沒有任何東西被保存在roles_mask字段中。在Stackoverflow中有很多關於「無法批量分配受保護的屬性」的問題,但它們似乎與這種情況密切相關。
有什麼建議嗎?
工作。不知道我明白爲什麼。這是因爲「角色=(角色)」和「角色」方法是作爲一個setter/getter對嗎? –
@dleatham http://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html#method-i-attr_accessible – felix