2016-06-20 2 views
0

У меня возникает проблема, связанная с передачей аргументов в рельсах. Из моего контроллера я хочу отправить переменную в качестве аргумента в задание обработчика запроса. Но я уверен, что я делаю что-то неправильно в отношении переменных и аргументов. Студент - это название модели. На самом деле таблица студентов содержит некоторые записи. У меня возникла следующая проблема.Проблема, связанная с аргументами метода в рельсах

формальный аргумент не может быть переменной экземпляра.

Вот мой код:

Мое приложение/контроллеры/файл 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 

Мое приложение/работа файл/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

я столкнулся, вероятно, только потому, что «модель» переменной – Abhradip

+1

лишь предположение, почему вы проходя символ ': xmodel' вместо переменной' xmodel' определенно ранее Кроме того,? afaik, передать экземпляр sidekiq - это плохая практика. В общем, вы должны отправить идентификатор. RequestHandlerJob.doit_later (Student.last.id) ', а затем в вашем работнике просто выберите требуемую запись' Student.find (student_id) ' – retgoat

+0

Он показывал неопределенный метод «doit_later» ... Я новичок в рельсах, поэтому я не знаю, что мне следует передать в качестве аргумента? Это: xmodel или просто модель. Раньше я проходил @model, но формальная аргументация ошибки не могла быть переменная экземпляра. – Abhradip

ответ

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 

Пожалуйста, имейте в виду, что вы не можете перенаправить пользовательскую форму на фоновое задание, потому что оно работает в фоновом режиме, и нет сеанса пользователя и браузера.

Вы можете просто сделать тяжелую работу, а затем уведомить своего пользователя через веб-сайт или как-то еще.

Вот родственная проблема RailsCast