1

我有一个带有设计的应用程序。我安装了 role_model 和 cancan gem。我将 user.rb 更新为:

require 'rubygems'
require 'role_model'

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  attr_accessible :email, :password, :password_confirmation, :remember_me, :roles, :roles_mask

  include RoleModel

  roles_attribute :roles_mask

  roles :admin, :contributor, :guest
end

然后,在rails控制台中我尝试

> u = User.find(:first)
  User Load (1.2ms)  SELECT "users".* FROM "users" LIMIT 1
 => #<User id: ...
> u.roles = [:admin]
NoMethodError: undefined method `roles_mask=' for #<User:0x00000002b57500>
    from /home/xxx/.rvm/gems/ruby-1.9.3-p194@rails-3.2.11/gems/activemodel-3.2.11/lib/active_model/attribute_methods.rb:407:in `method_missing'

角色掩码从何而来?我需要包含其他内容吗?

4

2 回答 2

7

除了安装 gems 之外,roles_mask还必须将列添加到users表中,就像在这个迁移中一样

class AddRolesMaskToUser < ActiveRecord::Migration
  def change
    add_column :users, :roles_mask, :integer
  end
end

这解决了问题。

于 2013-01-25T21:31:55.723 回答
0

这个问题与对象角色建模(建模语言)无关。这是关于如何为对象的角色建模,这是一个完全不同的主题(角色这个词在这里有完全不同的含义)。

另一方面,如果您想将对象角色建模与 Rails 结合起来,Constellation Query Language (CQL) 是 ORM 的纯文本版本,并且还包含针对 Rails 的生成器。

于 2014-03-20T06:41:37.487 回答