【问题标题】:delayed_job_active_record - Undefined method `any?'delay_job_active_record - 未定义的方法“任何?”
【发布时间】:2015-06-06 15:11:52
【问题描述】:

尝试使用delayed_job_active_record 将一些东西发送到后台,但是我为什么不能使用any??当事情没有发送到后台时工作正常。

undefined method `any?' for #<Delayed::Backend::ActiveRecord::Job:0x000000044b1348>

index.html.erb

<% if @products.any? %>
  <div class="products">
    <% @products.each do |product| %>
      <%= product.name %>
    <% end %>
  </div>
<% else %>
  <div class="products processing">

    <!-- Try again later -->

  </div>
<% end %>

ma​​in_controller.rb

class MainController < ApplicationController
  def index
    # Delay fetching
    @products = Affiliate.delay.fetch
  end
end

affiliate.rb

require "rest_client"

class Affiliate < ActiveRecord::Base
  def self.fetch
    response = RestClient::Request.execute(
      :method => :get,
      :url => "http://api.shopstyle.com/api/v2/products?pid=uid7849-6112293-28&fts=women&offset=0&limit=10"
    )

    @products = JSON.parse(response)["products"].map do |product|
      product = OpenStruct.new(product)
      affiliate = Affiliate.find_or_create_by(:name => product.name, :url => product.url)
      affiliate.save
    end
  end
end

【问题讨论】:

  • @items 是什么以及它从何而来?

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


【解决方案1】:

这不起作用,因为 @products 不再是一个数组 - 它是对将在未来某个时间执行的作业的引用

您需要重新考虑您的设置是如何工作的。例如,您的视图可以通过 Ajax 轮询以查看作业是否已完成。如果它已经从数据库中获取结果,因为您似乎将 API 结果保存在那里。

【讨论】:

  • delayed_job 不是这样工作的——@products 永远不会是一个工作引用(并且你延迟的方法的返回值也不会保存在任何地方)
  • 是的,我想我现在明白了。周末愉快!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-11
  • 1970-01-01
  • 2017-02-20
  • 1970-01-01
  • 2011-07-14
相关资源
最近更新 更多