Ruby on Rails - 模型中的延迟作业

时间:2012-04-03 16:23:08

标签: ruby-on-rails ruby ruby-on-rails-3 delayed-job

我需要做一个延迟的工作来计算模型中的fbLikes,但我有“undefined send_later()方法”的错误报告。有没有办法在模型中对我的fb_likes功能做延迟工作?

==============================最新================ ===================================

这是我项目中的最新代码。事情仍然相同,fb_likes不显示喜欢计数。

[Company.rb] -model

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

[配置/ LIB / 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 个答案:

答案 0 :(得分:3)

默认情况下不需要库文件。

  1. 将作业文件重命名为count_job.rb。使用camelCase获取文件名是疯狂的,会以不可预测的方式烧毁你。
  2. 创建初始值设定项并添加require 'count_job.rb'

答案 1 :(得分:0)

一种方法是创建一个将排队的单独工作程序,运行以获取更新的模型并在其上调用其fb_likes方法,但该方法需要公开。或者将逻辑带入工人本身。