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
我是 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