Ruby on rails 延迟的作业活动记录-未定义的方法'any?&x27;

Ruby on rails 延迟的作业活动记录-未定义的方法'any?&x27;,ruby-on-rails,activerecord,delayed-job,Ruby On Rails,Activerecord,Delayed Job,试图将一些内容发送到后台,但为什么我不能使用任何??如果没有将内容发送到后台,则可以正常工作 undefined method `any?' for #<Delayed::Backend::ActiveRecord::Job:0x000000044b1348> 未定义的方法'any'# index.html.erb <% if @products.any? %> <div class="products"> <% @products.ea

试图将一些内容发送到后台,但为什么我不能使用
任何?
?如果没有将内容发送到后台,则可以正常工作

undefined method `any?' for #<Delayed::Backend::ActiveRecord::Job:0x000000044b1348>
未定义的方法'any'#
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 %>
class MainController < ApplicationController
  def index
    # Delay fetching
    @products = Affiliate.delay.fetch
  end
end
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

主控制器.rb

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

    <!-- Try again later -->

  </div>
<% end %>
class MainController < ApplicationController
  def index
    # Delay fetching
    @products = Affiliate.delay.fetch
  end
end
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
class MainController
affiliate.rb

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

    <!-- Try again later -->

  </div>
<% end %>
class MainController < ApplicationController
  def index
    # Delay fetching
    @products = Affiliate.delay.fetch
  end
end
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
需要“rest\u客户端”
类附属:get,
:url=>“http://api.shopstyle.com/api/v2/products?pid=uid7849-6112293-28&fts=女性&offset=0&limit=10“
)
@products=JSON.parse(response)[“products”].map do | product|
product=OpenStruct.new(产品)
附属公司=附属公司。查找或创建(:name=>product.name,:url=>product.url)
保存
结束
结束
结束

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


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

什么是@items&它从哪里来?这不是延迟作业的工作原理-@产品将永远只是作业引用(并且延迟的方法的返回值也不会保留在任何地方)是的,我想我现在明白了。祝你周末愉快!