Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ActiveRecord::RecordInvalid:验证失败:lis中不包括资源类型_Ruby On Rails_Ruby_Activerecord_Rolify - Fatal编程技术网

Ruby on rails ActiveRecord::RecordInvalid:验证失败:lis中不包括资源类型

Ruby on rails ActiveRecord::RecordInvalid:验证失败:lis中不包括资源类型,ruby-on-rails,ruby,activerecord,rolify,Ruby On Rails,Ruby,Activerecord,Rolify,我是rails新手。我正在使用RolifyGem添加用户角色。 我在尝试从rails控制台添加角色时遇到了这个问题。有没有人面临过这个问题 u = User.first u.add_role(:admin).save! 错误列表=== ActiveRecord::RecordInvalid: Validation failed: Resource type is not included in the list. Rolify迁移文件============ class RolifyCrea

我是rails新手。我正在使用RolifyGem添加用户角色。 我在尝试从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`
class-RolifyCreateRolestrue
t、 时间戳
结束
创建表(:users\u roles,:id=>false)do | t|
t、 参考资料:用户
t、 参考:角色
结束
添加索引(:角色,:名称)
添加索引(:角色,[:名称,:资源类型,:资源id])
添加索引(:users\u roles,[:user\u id,:role\u id])
结束
结束`
我已经遵循了从这里安装rolify的文档==

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

在3.5版中,似乎不可能像以前的版本那样创建全局角色。 实际上,无论何时创建角色,它都需要资源类型,因为当前您创建的是没有任何资源的全局角色,所以它的抛出错误。 但若您在实例上创建角色,它将起作用。 假设你有一个叫“PAST”的模型为

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

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

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

  scopify 
end

类角色:users_roles behing_to:resource,:多态=>true
嘲笑
结束

您需要允许您的
角色
模型上的
资源类型
nil

对于Rails 4,在我们的
角色
模型中有以下内容:

belongs_to :resource, :polymorphic => true
validates :resource_type,
        :inclusion => { :in => Rolify.resource_types },
        :allow_nil => true
从Rails 5开始,
属于默认情况下所需的
关联,其中
可选:true
进入:

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

有没有在启动rails控制台后运行过rakedb:migration?谢谢。但我还没看过你的模型呢?类用户:添加默认角色到用户#资源化#包括默认设计模块。其他可用的有:#:可确认的,:可锁定的,:可超时的和:omniauthable设备:数据库(可验证的,:可注册的,:可恢复的,:可记忆的,:可跟踪的,:可验证的有)和(你属于)许多:角色,:加入(表=>:用户(角色#保存后:将(默认)角色)添加到(用户(角色)角色)end def add_default_role_to_user current_user=user.find_by_id self.id#current_user.add_role:normal_user end endclass roletrue validates:resource_type,:inclusion=>{in=>Rolify.resource_types}scopify endI我试过了。但它正在制造这个问题。未捕获异常:未定义Rolify:Module的“资源类型”方法。这是生成此项的行。==validates:resource_-type,:inclusion=>{:in=>Rolify.resource_-types}对模型的下面一行进行注释时,执行了以下技巧“#validates:resource_-type,:inclusion=>{:in=>Rolify.resource_-types},:allow_nil=>true”