Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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 rails允许用户编辑*仅*他们的数据,但查看每个人_Ruby On Rails_Ruby On Rails 4_Devise_Cancan - Fatal编程技术网

Ruby on rails rails允许用户编辑*仅*他们的数据,但查看每个人

Ruby on rails rails允许用户编辑*仅*他们的数据,但查看每个人,ruby-on-rails,ruby-on-rails-4,devise,cancan,Ruby On Rails,Ruby On Rails 4,Devise,Cancan,我有一个rails应用程序,使用Desive和cancan。我希望只允许用户编辑自己的数据,但仍然能够查看其他人的数据 我有: class Ability include CanCan::Ability def initialize(user) user ||= User.new # guest user (not logged in) if user.role == "member" their own only can :read, User

我有一个rails应用程序,使用Desive和cancan。我希望只允许用户编辑自己的数据,但仍然能够查看其他人的数据

我有:

class Ability
  include CanCan::Ability

  def initialize(user)
  user ||= User.new # guest user (not logged in)

    if user.role == "member"
    their own only
    can :read, User
    can :manage, User, user_id: user.id
  elsif user.role == "guest"

    can :read, User
  end
我还有:

class User < ActiveRecord::Base
  #attr_accessible :name , :email # Include default devise modules. Others available are:

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

ROLES = %w[member guest]


  def is?( requested_role )
    self.role == requested_role.to_s
  end

end
class用户
但我仍然可以编辑和删除其他用户的评论。当我不能的时候。为什么?我做错了什么? 轨道4 设计2.5.2 坎坎1.6


谢谢

您正在为您的用户模型指定
user\u id
作为列名:

can :manage, User, user_id: user.id
我敢打赌用户没有
User\u id
列——它只有
id
列。你想要的是:

can :manage, User, id: user.id
通过查看您的
schema.rb
文件并确保有(或没有)一个
user\u id
列来再次检查这一点。实际ID列称为
ID
,未在
schema.rb中列出,但实际存在于数据库表中


另外,请确保确实要允许
:管理
权限。
:manage
符号功能非常强大,允许用户对有问题的对象执行任何操作,包括删除该对象。

要授予用户编辑自己数据的权限,请更改

can :manage, User, user_id: user.id
can :update, User