ActiveRecord :: RecordInvalid:验证失败:资源类型不包含在lis中

时间:2015-01-12 07:10:50

标签: ruby-on-rails ruby activerecord rolify

我是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 个答案:

答案 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模型上允许nilRole

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