在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
这不是问题的原因,因为我在其他操作中使用了完全相同的代码来查找配置文件,并且它们运行良好。
答案 0 :(得分:2)
Profile.find_by
返回nil
,即:未找到用户。
因此,当您尝试使用@profile.user
时,您尝试访问的是user
上的nil
。
确保配置文件存在user_id
与params[: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!
如果什么都没发现(您可以从中进行救援),将会抛出异常