我是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
答案 0 :(得分:1)
似乎在3.5版本中,不可能像以前的版本那样创建全局角色。 实际上,只要创建了Role,它就需要resource_type,因为你创建的是没有任何资源的全局角色,它的抛出错误。 但是,如果您在实例上创建角色,它将起作用。 考虑一下名为'Post'的模型为
Class Post
resourcify
end
On Rails console, create
user = User.first
user.add_role(:admin, Post.first)
正如我上面给出的场景,当我创建角色时,它会将resource_type变为'Post'。但在您的情况下,角色不会获得resource_type。因此,如果您想创建全局角色,那么最好删除'validates:resource_type,:inclusion =&gt; {:in =&gt;来自您的'角色'模型的Rolify.resource_types}'
答案 1 :(得分:0)
版本&gt; = 3.5有这些问题,暂时使用版本rolify 3.4。我将修复然后发送拉请求。
答案 2 :(得分:0)
@Sazzad请更改角色模型,如下所示:
class Role < ActiveRecord::Base
has_and_belongs_to_many :users, :join_table => :users_roles belongs_to :resource, :polymorphic => true
scopify
end
答案 3 :(得分:0)
您需要在resource_type
模型上允许nil
为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