You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

额外提醒

  1. 强参数的必要性:Rails 5.1开始强制要求用强参数过滤请求参数,直接用params[:job]会触发ForbiddenAttributesError,所以必须定义job_params方法,把允许接收的属性列出来。
  2. session的有效性:要确保用户访问job_steps_path之前,已经执行过create方法并设置了session[:job_id],不然current_job会返回nil,后续的步骤页面会出现新的错误。

内容的提问来源于stack exchange,提问作者miklki14567

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:49:41