与rails

时间:2016-06-20 06:42:27

标签: ruby-on-rails ruby ruby-on-rails-3 variables arguments

我面临一些与传递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

1 个答案:

答案 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