我跟随this tutorial了解为用户分配角色的完全相同的用例。
我正在使用Rails 3.2.16
。
当我尝试从pry控制台测试角色分配时,我得到roles
的{{1}}字段未更新。
这是撬文:
User
以下是该模型的相关方法:
[14] pry(main)> a = User.last
User Load (0.3ms) SELECT `users`.* FROM `users` ORDER BY `users`.`id` DESC LIMIT 1
=> #<User id: 7, email: "a@b.c", encrypted_password: "...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 1, current_sign_in_at: "2013-12-29 11:14:36", last_sign_in_at: "2013-12-29 11:14:36", current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1", created_at: "2013-12-29 11:14:04", updated_at: "2013-12-31 09:50:26", username: "asf", confirmation_token: nil, confirmed_at: "2013-12-29 11:14:26", confirmation_sent_at: "2013-12-29 11:14:04", unconfirmed_email: nil, roles_mask: 0>
[15] pry(main)> a.roles = [:admin, :expired]
=> [:admin, :expired]
[16] pry(main)> a.save
(0.1ms) BEGIN
(0.1ms) COMMIT
=> true
这是迁移:
ROLES = %w[admin active expired]
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
你知道为什么协会不会在这里持续存在吗?
提前多多感谢。
答案 0 :(得分:0)
我认为我在roles=
方法中使用符号匹配字符串,但这不起作用。
我现在已将所有内容转换为符号,并且效果很好。
这是新代码:
ROLES = [:admin, :active, :expired]
def roles=(roles)
self.roles_mask= (roles & ROLES).map { |r| 2**ROLES.index(r) }.sum
end
def roles
roles_symbols.reject { |r| ((roles_mask || 0) & 2**ROLES.index(r)).zero? }
end