Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将变量从Rails中的服务保存到表中-属性访问器问题? 简短描述_Ruby On Rails_Ruby_Delayed Job_Attr Accessor - Fatal编程技术网

Ruby on rails 将变量从Rails中的服务保存到表中-属性访问器问题? 简短描述

Ruby on rails 将变量从Rails中的服务保存到表中-属性访问器问题? 简短描述,ruby-on-rails,ruby,delayed-job,attr-accessor,Ruby On Rails,Ruby,Delayed Job,Attr Accessor,我需要将字段保存到表中。我以前是通过控制器来完成的,它工作得很好,但是现在我需要从服务中设置这个字段。我正在使用attr_访问器,但无法使其正常工作 长描述 我编写了一个使用api创建哈希数组的服务工具service。我以前曾通过控制器将此数组保存到对象 控制器: 1: class ToolsController < ApplicationController 2: def create 3: tool_hash = params.delete('tool') 4: @tool

我需要将字段保存到表中。我以前是通过控制器来完成的,它工作得很好,但是现在我需要从服务中设置这个字段。我正在使用attr_访问器,但无法使其正常工作

长描述 我编写了一个使用api创建哈希数组的服务工具service。我以前曾通过控制器将此数组保存到对象

控制器:

1: class ToolsController < ApplicationController
2:  def create
3:   tool_hash = params.delete('tool')
4:   @tool = Tool.new
5:   # blah blah get params
6:   t = ToolService.new(# pass params to initialize service)
7:   @tool.all_data = t.run_tool_report(# pass params to get result)
8:  end
9: end
服务:

class ToolService
attr_accessor :all_data
 def initialize(# params)
  # initializing stuff
 end
 def run_tool_report(# params, including array_of_tools)
  @all_data = Array.new # create an array to hold all hashes of data
  array_of_tools.each do |each tool| 
   # run all api queries
   @each_tool_data = # hash of query results
   @all_data << @each_tool_data # add each hash of results to array 
  end
 return @all_data
 end
end 
这正如预期的那样有效。但是,我需要实现,因为这个查询需要很长时间。所以,在控制器中,我将第7行更改为t.delay.run_tool_report pass params以获得结果。我认为在服务中包含attr_accessor:all_数据将允许服务写入表中的@tool.all_数据字段,但情况似乎并非如此

当我使用@tool.delay.all_data=t.run_tool_report pass params获取结果时,@tool.all_data设置为延迟作业的id,而不是结果数组


那么,我是否错误地使用了attr_访问器?或者是否有其他方法在表中设置此字段?

当您想要异步运行任务时,延迟作业非常方便。当您编写t.delay.run_tool_报告时,它会在delayed_作业模型中创建一个要在后台运行的条目。此对象将在@tool.all_数据中返回给您。如果您想要运行工具报告的结果,您需要毫不延迟地运行并优化查询。预加载/预加载和缓存技术可能会派上用场。

Hmm,这是一个针对api的非常长的查询,数据需要尽可能地最新。我不知道预加载/预加载或缓存是否适用。