2

我是 Rails 的新手。我正在使用 rolify gem 来添加用户角色。当我尝试从 rails 控制台添加角色时,我遇到了这个问题。有没有人遇到过这个问题?

u = User.first
u.add_role(:admin).save!

错误列表 ===

ActiveRecord::RecordInvalid: Validation failed: Resource type is not included in the list.

rolify 迁移文件 =============

class RolifyCreateRoles < ActiveRecord::Migration
def change
create_table(:roles) do |t|
t.string :name
t.references :resource, :polymorphic => true
t.timestamps
end

create_table(:users_roles, :id => false) do |t|
  t.references :user
  t.references :role
end

add_index(:roles, :name)
add_index(:roles, [ :name, :resource_type, :resource_id ])
add_index(:users_roles, [ :user_id, :role_id ])

end
end`

我已按照从此处安装 rolify 的文档 == https://github.com/RolifyCommunity/rolify

4

4 回答 4

1

似乎在 3.5 版本中,不可能像以前版本那样创建全局角色。实际上,每当创建角色时,它都需要 resource_type,目前由于您正在创建没有任何资源的全局角色,因此会引发错误。但是,如果您在实例上创建角色,它将起作用。考虑您有一些名为“Post”的模型

Class Post
  resourcify 
end
On Rails console, create 
user = User.first
user.add_role(:admin, Post.first)

正如我在上面给出的场景一样,当我创建角色时,它将resource_type 为'Post'。但在您的情况下,角色没有获得资源类型。因此,如果您想创建全局角色,那么最好从您的“角色”模型中删除 ' validates :resource_type, :inclusion => { :in => Rolify.resource_types } '

于 2015-01-12T08:34:23.293 回答
0

@Sazzad 请更改角色模型,如下所示:

class Role < ActiveRecord::Base 
  has_and_belongs_to_many :users, :join_table => :users_roles belongs_to :resource, :polymorphic => true 

  scopify 
end
于 2015-01-12T10:55:56.883 回答
0

版本 >= 3.5 有这些问题,暂时使用版本 rolify 3.4。我将修复并发送然后拉取请求。

于 2015-01-12T08:21:00.037 回答
0

您需要允许resource_typenil您的Role模型上。

对于 Rails 4,我们的Role模型中有这个:

belongs_to :resource, :polymorphic => true
validates :resource_type,
        :inclusion => { :in => Rolify.resource_types },
        :allow_nil => true

从 Rails 5 开始,belongs_to默认情况下需要关联,这就是optional: true进来的地方:

belongs_to :resource, :polymorphic => true, optional:true
validates :resource_type,
        :inclusion => { :in => Rolify.resource_types },
        :allow_nil => true
于 2019-12-24T22:32:03.263 回答