ActiveRecord::RecordInvalid:验证失败:列表中不包含资源类型

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

我是 rails.I 的新手,我正在使用 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

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

似乎在3.5版本中,无法像以前的版本那样创建全局角色。 实际上,每当创建 Role 时,它​​都需要 resource_type,目前由于您正在创建没有任何资源的全局角色,因此会抛出错误。 但是,如果您在实例上创建角色,它将起作用。 假设您有一些模型名为 'Post' as

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

正如我在上面给出的场景,当我创建角色时,它会得到 resource_type 作为 'Post'。但在你的情况下,角色没有得到 resource_type。因此,如果您想创建全局角色,那么最好从您的 'role' 模型 [=11] 中删除 'validates :resource_type, :inclusion => { :in => Rolify.resource_types } ' =]

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

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

  scopify 
end

您需要允许 resource_type 在您的 Role 模型上成为 nil

对于 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