Ruby on rails 如何创建动作控制器帮助器类以及如何在控制器动作中访问该类?

Ruby on rails 如何创建动作控制器帮助器类以及如何在控制器动作中访问该类?,ruby-on-rails,ruby,helpers,Ruby On Rails,Ruby,Helpers,大家好,这是个新手问题 我正在创建一个rails应用程序,在向用户显示结果之后,我需要在后台执行一些其他操作来更新数据库 (很抱歉,我不擅长解释,请参阅我的示例代码了解情况) 在控制器的操作中,我使用第三方api从远程服务器获取数据。 在向用户显示提取的数据之后,我想用提取的数据上的自定义数据更新数据库表 class MyController < ApplicationController def SomeAction #some logic @result = FetchDat

大家好,这是个新手问题

我正在创建一个rails应用程序,在向用户显示结果之后,我需要在后台执行一些其他操作来更新数据库

(很抱歉,我不擅长解释,请参阅我的示例代码了解情况)

在控制器的操作中,我使用第三方api从远程服务器获取数据。 在向用户显示提取的数据之后,我想用提取的数据上的自定义数据更新数据库表

class MyController < ApplicationController
 def SomeAction
  #some logic
  @result = FetchDataFromApi#Using third party api to fetch huge data 
  #show result to user
  #after showing i need to do following operations elsewhere (controller helper)
  #based on some fetched result i want to update my table
  myId = @result.id
  dataObj = MyModel.find(myId)
  info = @result.information.gsub(',',' ') #some string operation
  dataObj.update_attributes(:info, info)
 end
end
class MyController

我可以使用
spawling
gem在向用户显示结果后执行额外的操作。但我只是好奇我是否可以用helper或其他rails的东西来实现这一点。

而在某些情况下,使用后台处理是有意义的。这不是其中之一

我假设“向用户显示结果”意味着根据从api获取的数据呈现一些模板

实际上,将外部API的访问转移到后台可能是一个好主意,但这需要更改流程。至于更新数据库记录,将其移到后台通常不是一个好主意

也就是说,我不会在控制器中进行更新,我会将其移动到模型或“突变”类中:

class Model
  def self.update_from_api
    res = API.fetch ...
    object = find res.id
    object.update_from_api! res
    res
  end

  def update_from_api(api_data)
    update_attributes! info: api_data.gsub(....)
  end
end

如果你需要在后台运行任何东西,你需要使用sidekiq或类似的工具。@BroiSatse actioncontroller helper有任何副作用吗?actioncontroller helper是控制器和视图之间的桥梁,除非你有其他想法。响应始终作为请求生命周期的最后一步发送,因此任何非后台代码都需要在发送响应之前完成执行。您可以尝试使用线程,但这些线程会导致更多问题。Sidekiq是我在所有项目中使用的解决方案,它似乎做得很好。当然,产卵怎么样?谢谢你的建议。我会试试你的建议,然后告诉你。