Ruby on Rails - отложенная работа в модели - PullRequest
0 голосов
/ 03 апреля 2012

Мне нужно выполнить отложенную работу для подсчета fbLikes в Model, но у меня есть сообщение об ошибке "undefined send_later () method". Есть ли способ сделать отложенную работу с моей функцией fb_likes в модели?

============================== Последние ================ ===================================

Это мой последний код в моем проекте. Все по-прежнему, fb_likes не отображает количество лайков.

[Company.rb] -модели

require "delayed_job"
require "count_job.rb"

class Company < ActiveRecord::Base

before_save :fb_likes

    def fb_likes            
        Delayed::Job.enqueue(CountJob.new(self.fbId))
    end     
 end

[конфигурационный / Библиотека / count_job.rb]

class CountJob<Struct.new(:fbId)
def perform 
    uri = URI("http://graph.facebook.com/#{fbId}")
    data = Net::HTTP.get(uri)
    self.fbLikes = JSON.parse(data)['likes']
end
end

[контроллер]

 def create 
    @company = Company.new(params[:company])

    if @company.save!
        flash[:success] = "New company successfully registered."
   ----and other more code----

Ответы [ 2 ]

3 голосов
/ 06 апреля 2012

Файлы библиотеки по умолчанию не требуются.

  1. Переименуйте файл задания в count_job.rb.Использование camelCase для имен файлов безумно и может привести к непредсказуемым последствиям.
  2. Создайте инициализатор и добавьте require 'count_job.rb'
0 голосов
/ 03 апреля 2012

Один из способов - создать отдельного работника, который будет поставлен в очередь, прогон для извлечения обновленной Модели и вызова для нее метода fb_likes, но этот метод должен быть общедоступным. Или возьмите логику в самого работника.

...