Rails控制器if语句语法错误排查求助
找出你的update方法中的三处语法错误
让我帮你逐一排查这段Rails控制器代码里的语法问题:
括号不匹配+参数传递错误:你的if条件里,
check_email_link的参数写法完全错了。原代码把params[:expdate] && @list.update(wishlist_params)整个当成了check_email_link的参数,而且if语句的左括号没有对应的右括号。正确的逻辑应该是先调用check_email_link传入params[:expdate],再把这个结果和@list.update的结果做逻辑与。修正后应该是:if check_email_link(params[:expdate]) && @list.update(wishlist_params)要是你想保留if的括号,记得要闭合:
if (check_email_link(params[:expdate]) && @list.update(wishlist_params))redirect_to的多余空格+括号:
redirect_to (admin_list_url)这种写法在Ruby里会导致解析问题,方法调用的括号前不应该加空格。你可以直接去掉括号写成:redirect_to admin_list_url或者如果习惯加括号,要紧贴方法名:
redirect_to(admin_list_url)check_email_link的参数逻辑错误:原代码里
check_email_link(params[:expdate] && @list.update(wishlist_params))会让check_email_link接收一个布尔值(params[:expdate]和更新操作结果的逻辑与),但你原本是想传时间戳params[:expdate]给这个方法,这不仅违背了方法的参数预期,也属于语法层面的参数传递错误——因为方法需要的是时间戳参数,而非布尔表达式。
修正后的完整代码示例:
def update @list = List.find_by(key: params[:id]) if check_email_link(params[:expdate]) && @list.update(wishlist_params) flash[:notice] = t("update") redirect_to admin_list_url else flash[:error] = t("not_active") render 'edit' end end
内容的提问来源于stack exchange,提问作者amarradi
相关产品推荐
相关产品推荐

