我的控制器出了问题。
当我尝试添加播放器时,我首先找到要与播放器关联的用户,但是当此电子邮件未注册时,我收到此错误:
undefined method `id' for nil:NilClass
我尝试使用.nil?,。blank?但是我总是无法检测到nil变量而且我不知道为什么。
这是我的控制器:
def create
if user_signed_in?
@player = Player.new
@user_ref = User.find_by_email(params[:new_player][:email])
if @user_ref.blank?
flash[:errors] = []
flash[:errors] << {:message => "Adresse email introuvable", :strong => 'Erreur :'}
redirect_to new_club_team_player_path
end
@player.user_id = @user_ref.id
@player.position_id = params[:new_player][:position_id]
if @player.save
redirect_to club_team_player_path(params[:club_id], params[:team_id], @player)
else
flash[:errors] = []
flash[:errors] << {:message => "Une erreur est survenu lors de l'enregistrement de ce joueur", :strong => 'Erreur :'}
redirect_to new_club_team_player_path
end
else
flash[:errors] = []
flash[:errors] << {:message => 'Vous devez vous connecter pour créer une Equipe', :strong => 'Accès Refusé :'}
redirect_to new_club_team_player_path
end
end
错误出现在这一行:
@player.user_id = @user_ref.id
有什么想法吗?
答案 0 :(得分:1)
你在nil时分配一个值。我猜你应该把它放在像这样的else块中
def create
if user_signed_in?
@player = Player.new
@user_ref = User.find_by_email(params[:new_player][:email])
if @user_ref.blank?
flash[:errors] = []
flash[:errors] << {:message => "Adresse email introuvable", :strong => 'Erreur :'}
redirect_to new_club_team_player_path
else
@player.user_id = @user_ref.id
@player.position_id = params[:new_player][:position_id]
end
if @player.save
redirect_to club_team_player_path(params[:club_id], params[:team_id], @player)
else
flash[:errors] = []
flash[:errors] << {:message => "Une erreur est survenu lors de l'enregistrement de ce joueur", :strong => 'Erreur :'}
redirect_to new_club_team_player_path
end
else
flash[:errors] = []
flash[:errors] << {:message => 'Vous devez vous connecter pour créer une Equipe', :strong => 'Accès Refusé :'}
redirect_to new_club_team_player_path
end
end
答案 1 :(得分:0)
3件事。
首先,在某处记录params [:new_player] [:email],或使用pry-rails gem(我的选择)。您将看到您尝试用来查找用户的电子邮件。
其次,我相信新的语法是User.find_by(email:params [:new_player] [:email])
@ user_ref.blank?是不是该方法的适当实现.blank?。如果要检查用户对象,请使用
if @user_ref.present?
,甚至只是
if @user_ref
,用于检查变量是否已分配给对象。
答案 2 :(得分:0)
好的问题是我必须将下一部分放在其他部分:
def create
if user_signed_in?
@player = Player.new
@user_ref = User.find_by_email(params[:new_player][:email])
if @user_ref.blank?
flash[:errors] = []
flash[:errors] << {:message => "Adresse email introuvable", :strong => 'Erreur :'}
redirect_to new_club_team_player_path
else
@player.user_id = @user_ref.id
@player.position_id = params[:new_player][:position_id]
if @player.save
redirect_to club_team_player_path(params[:club_id], params[:team_id], @player)
else
flash[:errors] = []
flash[:errors] << {:message => "Une erreur est survenu lors de l'enregistrement de ce joueur", :strong => 'Erreur :'}
redirect_to new_club_team_player_path
end
end
else
flash[:errors] = []
flash[:errors] << {:message => 'Vous devez vous connecter pour créer une Equipe', :strong => 'Accès Refusé :'}
redirect_to new_club_team_player_path
end
end