Ruby on rails 将变量从Rails中的服务保存到表中-属性访问器问题? 简短描述
我需要将字段保存到表中。我以前是通过控制器来完成的,它工作得很好,但是现在我需要从服务中设置这个字段。我正在使用attr_访问器,但无法使其正常工作 长描述 我编写了一个使用api创建哈希数组的服务工具service。我以前曾通过控制器将此数组保存到对象 控制器: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
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的非常长的查询,数据需要尽可能地最新。我不知道预加载/预加载或缓存是否适用。