correct_user без использования current_user?
Я хочу, чтобы люди, которые не вошли в систему, могли видеть страницу шоу. Прямо сейчас они получают NoMethodError
ошибка для current_user
,
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
?
4 ответа
Решение
if current_user
@correct_user = current_user.challenges.find_by(id: params[:id])
else
@correct_user = nil
end
Это должно помочь определить правильность 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
Призвание .challenges
на current_user
если current_user
является null
приведет к вашей ошибке.
def show
if current_user
@correct_user = current_user.challenges.find_by(id: params[:id])
end
end
Более чем вероятно current_user
возвращает ноль, и поэтому метод испытаний не может работать и дает вам NoMethodError