我面临一些与传递rails的参数相关的问题。从我的控制器我想将变量作为参数发送到请求处理程序作业。但我确信我对变量和参数做错了。 学生是型号名称。实际上学生表包含一些记录。 我面临以下问题。
形式参数不能是实例变量。
这是我的代码:
我的app / controllers / students_controller.rb文件是: -
class StudentsController < ApplicationController
attr_accessor :xmodel
def new
@student=Student.new
@students=Student.all
end
def create
@student=Student.new(u_params)
@student.set_insertbool_field
xmodel=Student.last
RequestHandlerJob.doit_later(:xmodel)
if @student.save
redirect_to new_student_path
end
end
def u_params
params.require(:student).permit(:id , :firstname, :lastname)
end
end
我的app / jobs / request_handler_job.rb文件是:
class RequestHandlerJob < ActiveJob::Base
queue_as :default
self.queue_adapter = :sidekiq
def doit_later(:xmodel)
# Do something later
@extract_bool=:xmodel.inserted_bool
if @extract_bool == 1
redirect_to new_student_path , :notice => "Inserted and Queued"
end
end
end
答案 0 :(得分:0)
请尝试下一步:
# app/controllers/students_controller.rb
def create
@student=Student.new(u_params)
@student.set_insertbool_field
RequestHandlerJob.perform_later(@student.id) if @student.extract_bool == 1
if @student.save
flash[:notice] = "Inserted and Queued"
render @student
else
render 'new'
end
end
# app/jobs/request_handler_job.rb
class RequestHandlerJob < ActiveJob::Base
queue_as :default
def perform(student_id)
# extract_bool is == 1
student = Student.find(student_id)
# do some hard work here
end
end
请记住,您无法将用户重定向到后台作业,因为它在后台运行,并且没有用户会话和浏览器。
您可以在那里努力工作,然后通过websocket或其他方式通知您的用户。
以下是相关的RailsCast