Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.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 未定义的方法'has#u role?';零级:零级_Ruby On Rails_Rolify - Fatal编程技术网

Ruby on rails 未定义的方法'has#u role?';零级:零级

Ruby on rails 未定义的方法'has#u role?';零级:零级,ruby-on-rails,rolify,Ruby On Rails,Rolify,尝试将rolify方法应用于我的用户时,出现以下错误: undefined method `has_role?' for nil:NilClass 我不明白为什么,因为当前用户应该是在每个视图中都可以访问的全局方法,对吗?怎么可能是零呢 谢谢 控制器 def show @photo = Photo.friendly.find(params[:id]) impressionist(@photo) @photos = Photo.latest_pho

尝试将rolify方法应用于我的用户时,出现以下错误:

undefined method `has_role?' for nil:NilClass
我不明白为什么,因为当前用户应该是在每个视图中都可以访问的全局方法,对吗?怎么可能是零呢

谢谢

控制器

def show
        @photo = Photo.friendly.find(params[:id])
        impressionist(@photo)
        @photos = Photo.latest_photos
        @user = @photo.user
        @pin = Pin.new
        @pin.photo_id = @photo.id
        @category = Category.all
        @commentable = @photo
        @comments = @commentable.comments
        @comment = Comment.new
        @sponsors = @photo.sponsors
        @zone = Zone.all
        respond_to do |format|
            format.html #show.html.erb
            format.json {render json: @photo}
        end
    end
我的观点

  <% if current_user.has_role? :admin %>
    <%= link_to "Eliminar", user_photo_pin_path(user_id: @user.id, photo_id: @photo.id, id: pin.id) , method: :delete, data: { confirm: 'Quieres borrar esto?'}, class: "delete right" %>
    <%= link_to 'Editar', edit_user_photo_pin_path(user_id: @user.id, photo_id: @photo.id, id: pin.id), :class=> "link", class: "edit quarter_margin_right right" %>
    <% end %>
<% end %>

“链接”,类别:“编辑季度利润率”%>

对于要验证和设置
当前用户的设备
,您可以在控制器中执行操作之前包含以下

before_action :authenticate_user!
如果您只想对用户进行特定操作的身份验证:

before_action :authenticate_user!, only: [:new, :update]

如果要验证所有控制器的用户身份,只需将其放入
应用程序控制器

您需要检查视图中是否有
当前用户

<% if current_user && current_user.has_role?(:admin) %>
    <%= link_to "Eliminar", user_photo_pin_path(user_id: @user.id, photo_id: @photo.id, id: pin.id) , method: :delete, data: { confirm: 'Quieres borrar esto?'}, class: "delete right" %>
    <%= link_to 'Editar', edit_user_photo_pin_path(user_id: @user.id, photo_id: @photo.id, id: pin.id), :class=> "link", class: "edit quarter_margin_right right" %>
    <% end %>
<% end %>
然后,您可以简化视图:

<% if has_role?(:admin) %>
    <%= link_to "Eliminar", user_photo_pin_path(user_id: @user.id, photo_id: @photo.id, id: pin.id) , method: :delete, data: { confirm: 'Quieres borrar esto?'}, class: "delete right" %>
    <%= link_to 'Editar', edit_user_photo_pin_path(user_id: @user.id, photo_id: @photo.id, id: pin.id), :class=> "link", class: "edit quarter_margin_right right" %>
<% end %>

“链接”,类别:“编辑季度利润率”%>

请注意,我们正在视图上下文中调用
has\u role?

在\u操作:验证用户之前是否有
在控制器中,验证和设置
当前用户
当前用户
是一种在每个视图中都可以访问的方法,但在您的情况下,它返回
nil
,这就是您出错的原因。@Ali就是这样。谢谢@MarekLipka我知道,只是不明白为什么:(很好,我会发布一个答案:)认为这是一个身份验证问题,问题是在使用has\u角色之前检查当前用户。谢谢从技术上讲,您需要将
<% if has_role?(:admin) %>
    <%= link_to "Eliminar", user_photo_pin_path(user_id: @user.id, photo_id: @photo.id, id: pin.id) , method: :delete, data: { confirm: 'Quieres borrar esto?'}, class: "delete right" %>
    <%= link_to 'Editar', edit_user_photo_pin_path(user_id: @user.id, photo_id: @photo.id, id: pin.id), :class=> "link", class: "edit quarter_margin_right right" %>
<% end %>