delayed_job_active_record - 未定义的方法“有吗?”
delayed_job_active_record - Undefined method `any?'
正在尝试使用 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 %>
main_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
这不起作用,因为 @products
不再是数组 - 它是对将在未来某个时间执行的作业的引用
您需要重新考虑您的设置是如何工作的。例如,您的视图可以通过 Ajax 轮询以查看作业是否已完成。如果它随后从数据库中获取结果,因为您似乎将 API 结果保存在那里。
正在尝试使用 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 %>
main_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
这不起作用,因为 @products
不再是数组 - 它是对将在未来某个时间执行的作业的引用
您需要重新考虑您的设置是如何工作的。例如,您的视图可以通过 Ajax 轮询以查看作业是否已完成。如果它随后从数据库中获取结果,因为您似乎将 API 结果保存在那里。