-nil:NilClass的未定义方法“用户”

时间:2019-01-16 02:16:16

标签: ruby-on-rails ruby

update控制器操作上,rails返回以下错误,

undefined method `user' for nil:NilClass

问题应该在后面,

def update
  @profile = Profile.find_by(user_id: params[:id])
  if @profile.user == current_user
    @profile.update(profile_params) 
    flash[:info] = "Profile successfully updated" 
  else

这不是问题的原因,因为我在其他操作中使用了完全相同的代码来查找配置文件,并且它们运行良好。

1 个答案:

答案 0 :(得分:2)

Profile.find_by返回nil,即:未找到用户。 因此,当您尝试使用@profile.user时,您尝试访问的是user上的nil

确保配置文件存在user_idparams[:id]匹配且params[:id]不能为空或为零。

摆脱致命错误的一种方法是在使用@profile之前先检查其是否为零:

def update
  @profile = Profile.find_by(user_id: params[:id])
  if @profile.present? 
    if @profile.user == current_user
      @profile.update(profile_params) 
      flash[:info] = "Profile successfully updated" 
    else
    end
  else
    # Profile not found
  end
end

或者,您可以使用find_by的爆炸式变化:

Profile.find_by!

如果什么都没发现(您可以从中进行救援),将会抛出异常