使用Devise的current_user报错,配置before_action :authenticate_user!不生效
问题解决:Rails项目Devise辅助方法调用报参数错误
错误根因
你遇到的参数错误和before_action :authenticate_user!配置无关,错误来自自定义辅助方法的调用参数不匹配:
- 控制器中定义的
user_avatar方法明确要求传入1个user参数 - 视图调用
user_avatar时没有传入任何参数,直接触发参数数量不匹配错误
修复方案
二选一即可:
方案1:调用时传入当前用户参数
修改视图代码,给user_avatar传入提前赋值的@user实例变量:
<div class="container text-center"> <div class="row"> <h2>我的页面</h2> <%= image_tag(user_avatar(@user)) %> </div> </div>
方案2:修改辅助方法适配无参数调用
修改控制器的user_avatar方法,给参数设置默认值为当前登录用户,不用传参也可正常调用:
def user_avatar(user = current_user) # 建议替换为blank?判断,避免avatar_url为nil时调用empty?报错 if user.avatar_url.blank? "https://i.guim.co.uk/img/media/26392d05302e02f7bf4eb143bb84c8097d09144b/446_167_3683_2210/master/3683.jpg?width=1200&height=1200&quality=85&auto=format&fit=crop&s=49ed3252c0b2ffb49cf8b508892e452d" else user.avatar_url end end
内容的提问来源于stack exchange,提问作者Дмитрий Герасименко
相关产品推荐
相关产品推荐

