繁体   English   中英

correct_user不使用current_user?

[英]correct_user without using current_user?

我希望未登录的人能够看到显示页面。 现在他们得到current_userNoMethodError错误。

def show
  @correct_user = current_user.challenges.find_by(id: params[:id])
end

sessions_helper

  # Returns the current logged-in user (if any).
  def current_user
    if (user_id = session[:user_id])
      @current_user ||= User.find_by(id: user_id)
    elsif (user_id = cookies.signed[:user_id])
      user = User.find_by(id: user_id)
      if user && user.authenticated?(:remember, cookies[:remember_token])
        log_in user
        @current_user = user
      end
    end
  end

我使用@correct_user因为我只想向挑战的创建者展示某些东西:

<% if @correct_user %>
  # show stuff to user who made challenge  
<% else %>
  # show to everyone else, which would mean logged in users and non logged in users 
<% end %> 

除了@correct_user之外,如何允许未登录的用户查看显示页面?

这个应该有助于检测current_user是否正确。

class UsersController < ApplicationController    
    before_action :set_challenge, only: :show
    before_action :check_user, only: :show

    private 

  def set_ challenge
     @challenge = Challenge.find(params[:id])
  end


    def check_user
      if current_user.id != @challenge.user_id
        redirect_to root_url, alert: "Sorry, You are not allowed to be here, Bye Bye ))"
      end
    end
end

如果current_usernull则在current_user上调用.challenges将导致您的错误。

def show
  if current_user
    @correct_user = current_user.challenges.find_by(id: params[:id])
  end
end
if current_user
  @correct_user = current_user.challenges.find_by(id: params[:id])
else
  @correct_user = nil
end

很可能current_user返回nil,因此challenge方法无法运行并为您提供NoMethodError

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM