使用Wicked Gem报错:Undefined local variable or method 'current_job'求助
解决Wicked Gem中
current_job未定义的错误 嘿,这个问题其实很好解决——你在控制器里调用了current_job方法,但压根没告诉Rails这个方法是干啥的,它找不到这个方法,所以才抛出了undefined local variable or method的错误,系统提示你是不是想写current_user,是因为current_user是Devise这类认证工具常用的方法,Rails觉得你可能手滑打错了。
问题根源
看你的代码,在create方法里你把新建的job的id存在了session[:job_id]里,但后续的show和update方法直接调用current_job,却没定义这个方法该怎么从session里取出对应的Job对象。
解决方案
你需要在控制器的private部分补上current_job方法,让它从session里读取job_id并查询对应的Job记录:
class JobStepsController < ApplicationController include Wicked::Wizard steps :company_info, :payment def show @job = current_job render_wizard end def update @job = current_job @job.attributes = job_params # 换成强参数,后面会解释原因 render_wizard @job end def create @job = Job.new(job_params) if @job.save session[:job_id] = @job.id redirect_to job_steps_path else render :new end end private # 新增current_job方法,从session中获取当前job def current_job # 用||=避免重复查询数据库,只有@current_job不存在时才执行查找 @current_job ||= Job.find(session[:job_id]) if session[:job_id] end def redirect_to_finish_wizard redirect_to @job, notice: 'Thank you for job posting' end # 新增强参数方法(Rails 5.1必须) def job_params # 替换成你Job模型实际需要接收的属性 params.require(:job).permit(:company_name, :payment_amount, :contact_email, ...) end end
额外提醒
- 强参数的必要性:Rails 5.1开始强制要求用强参数过滤请求参数,直接用
params[:job]会触发ForbiddenAttributesError,所以必须定义job_params方法,把允许接收的属性列出来。 - session的有效性:要确保用户访问
job_steps_path之前,已经执行过create方法并设置了session[:job_id],不然current_job会返回nil,后续的步骤页面会出现新的错误。
内容的提问来源于stack exchange,提问作者miklki14567
相关产品推荐
相关产品推荐

