У меня есть следующий в контроллере приложения:Вызова действия контроллера из задачи грабель
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
def api_auth
@api_key = Rails.application.secrets.api_key
@api_secret = Rails.application.secrets.api_secret
@host_id = Rails.application.secrets.host_id
@data_type = 'JSON'
@options = {
body: {
api_key: @api_key,
api_secret: @api_secret,
host_id: @host_id,
data_type: @data_type
}
}
end
end
В моем контроллере у меня есть ...
before_action :api_auth
...
def get_stuff
response = HTTParty.post("api_url", @options)
stuffs = response.parsed_response["stuffs"]
current_stuffs = stuff.all
stuffs.each do |w|
#unless stuff id already exists in DB, then create it
#what about if an attribute of a stuff is updated? How do we capture that? UUID?
unless (current_stuffs.pluck :stuff_id).map(&:to_s).include?(w["id"].to_s)
stuff.create(stuff_id: w["id"], topic: w["topic"], start_time: w["start_time"], join_url: w["join_url"])
end
end
конца
ого следующая задача грабли ...
desc "Heroku task to get stuff"
task :get_stuff => :environment do
puts "Getting stuff from api..."
session = ActionDispatch::Integration::Session.new(Rails.application)
session.post "/posts/get_stuff"
puts "done."
end
Пути правильны, и я не получаю никаких ошибок при запуске задачи. Однако, когда я запускаю задачу, мое обновление базы данных не происходит.
Я знаю, что действие работает, потому что у меня есть простая кнопка для настройки, которая вызывает одно и то же действие.
Я думаю, что это мои вопросы Тион; как я могу назвать логику, которая уже существует ... в контроллере. Я понимаю, что логика в коде ... контроллер в этом случае. Я мог бы переместить логику в модель и вызвать ее оттуда с помощью метода класса, но я думаю, что оставить логику в контроллере лучше подходит для того, что я хочу делать. Есть ли другой способ вызова контроллера, который управляется через спокойный маршрут? – Lumbee
@ Lumbee Зависит от того, что это за логика. Вполне вероятно, что лучше переместить эту логику в другом месте (модель или объект обслуживания или что-то в этом роде) –
Я слышу вас. Я добавляю немного больше контекста и кода в вопросе. Надеюсь, теперь это имеет больше смысла. – Lumbee