Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.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 增加角色及;设计用户的权限;NoMethodError:未定义的方法_Ruby On Rails_Ruby_Devise_Cancan_Activescaffold - Fatal编程技术网

Ruby on rails 增加角色及;设计用户的权限;NoMethodError:未定义的方法

Ruby on rails 增加角色及;设计用户的权限;NoMethodError:未定义的方法,ruby-on-rails,ruby,devise,cancan,activescaffold,Ruby On Rails,Ruby,Devise,Cancan,Activescaffold,Rails 3.0.13、Desive、CanCan和活动脚手架;RVM上的Ruby 1.9.3 194(如果有区别的话) 我正在尝试为Desive用户和特定权限设置通用角色(要求角色具有默认权限,但可以在用户级别覆盖权限)。ability.rb能够使用is\u implementer?方法而不会出现问题 如果我进入控制台,将用户分配给var(@user),然后执行@user.role或@user.user\u权限),则角色或用户权限会一直出现此错误: NoMethodError: undefi

Rails 3.0.13、Desive、CanCan和活动脚手架;RVM上的Ruby 1.9.3 194(如果有区别的话)

我正在尝试为Desive用户和特定权限设置通用角色(要求角色具有默认权限,但可以在用户级别覆盖权限)。ability.rb能够使用
is\u implementer?
方法而不会出现问题

如果我进入控制台,将用户分配给var(
@user
),然后执行
@user.role
@user.user\u权限
),则角色或用户权限会一直出现此错误:

NoMethodError: undefined method `role' for #<ActiveRecord::Relation:0x98173e8>
    from /home/scott/.rvm/gems/ruby-1.9.3-p194@rails3/gems/activerecord-3.0.13/lib/active_record/relation.rb:374:in `method_missing'
    from (irb):7
    from /home/scott/.rvm/gems/ruby-1.9.3-p194@rails3/gems/railties-3.0.13/lib/rails/commands/console.rb:44:in `start'
    from /home/scott/.rvm/gems/ruby-1.9.3-p194@rails3/gems/railties-3.0.13/lib/rails/commands/console.rb:8:in `start'
    from /home/scott/.rvm/gems/ruby-1.9.3-p194@rails3/gems/railties-3.0.13/lib/rails/commands.rb:23:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'
NoMethodError:未定义的方法“角色”#
from/home/scott/.rvm/gems/ruby-1.9.3-p194@rails3/gems/activerecord-3.0.13/lib/active\u record/relation.rb:374:in'method\u missing'
来自(irb):7
from/home/scott/.rvm/gems/ruby-1.9.3-p194@rails3/gems/railties-3.0.13/lib/rails/commands/console.rb:44:in'start'
from/home/scott/.rvm/gems/ruby-1.9.3-p194@rails3/gems/railties-3.0.13/lib/rails/commands/console.rb:8:in'start'
from/home/scott/.rvm/gems/ruby-1.9.3-p194@rails3/gems/railties-3.0.13/lib/rails/commands.rb:23:in`'
来自脚本/rails:6:in'require'
来自脚本/rails:6:in`'
型号:

用户类

class User < ActiveRecord::Base
  has_and_belongs_to_many :user_groups
  has_many :user_permissions

  belongs_to :role

  # Include default devise modules. Others available are:
  # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me, :role_id

  def is_implementer?
    self.role.implementer?
  end
end
class用户
用户权限

class UserPermission < ActiveRecord::Base
  belongs_to :user
  belongs_to :permission
end
class UserPermission
角色

类角色

如果您想查看任何其他内容(例如CanCan's ability.rb)。

当您执行
@user=user.where(:id=>2)
操作时,请告知我,该操作不会获取数据并实例化用户。正如您的错误所指出的,这是一个ActiveRecord::关系

这是因为您可以执行类似于
User.where(:active=>true.limit(5)

所以对于你的情况,你可以这样做

@user = User.where(:id => 2).first 


然后你可以调用#role或#user_permissions,因为现在@user实际上是一个用户实例。

当你调用
@user=user.where(:id=>2)
时,它不会获取数据并实例化用户。正如您的错误所指出的,这是一个ActiveRecord::关系

这是因为您可以执行类似于
User.where(:active=>true.limit(5)

所以对于你的情况,你可以这样做

@user = User.where(:id => 2).first 


然后你可以调用#role或#user_permissions,因为现在@user实际上是一个用户实例。

你运行了所有的数据库迁移吗?是的,我运行了(花了一点时间确认一下,以确保我没有盲目回答)。你在控制台中做什么?@ismaelga I do'@user=user.where(:id=>2)`然后是导致我在上面粘贴错误的
@user.role
@user.user\u权限
,您是否运行了所有数据库迁移?是的,我已经运行了(花了一点时间确认,以确保我没有盲目回答)。您在控制台中做什么?@ismaelga I do'@user=user.where(:id=>2)`然后是
@user.role
@user.user\u权限
,这导致我在ARG上面粘贴的错误。谢谢ARG。谢谢
@user = User.find(2) # this is more common