我的模型中有逻辑,我认为最适合服务类。它从API中获取电影列表。理想情况下,我希望此服务类执行相同操作并为数据库设定种子。目前,我在Movie.create_all_from_api
文件中调用seeds.rb
。我是Rails的新手,所以我想知道在哪里放置这个服务类以及我应该在哪里调用该服务。我把它放在/app/service
文件夹中吗?
Movie.rb
class Movie < ApplicationRecord
require 'rest_client'
has_many :reviews
def self.create_all_from_api
moviedata = retrieve_results
moviedata['results'].each do |m|
Movie.create(title: m['title'], release: m['release_date'], genre: m['genre'])
end
end
def self.get_data(url)
RestClient.get(url, { :content_type => :json})
end
def self.retrieve_results
url = "https://api.themoviedb.org/3/movie/popular?page=1&language=en-US&api_key=s0m3n1c3k3y"
JSON.parse(get_data(url))
end
end
我建议的服务类
class ApiService
require 'rest_client'
def self.create_all_from_api
moviedata = retrieve_results
moviedata['results'].each do |m|
Movie.create(title: m['title'], release: m['release_date'], genre: m['genre'])
end
end
def self.get_data(url)
RestClient.get(url, { :content_type => :json})
end
def self.retrieve_results
url = "https://api.themoviedb.org/3/movie/popular?page=1&language=en-US&api_key=s0m3n1c3k3y"
JSON.parse(get_data(url))
end
end
答案 0 :(得分:0)
是的,您可以创建一个app/services/
文件夹。
我对您的代码提出了一些意见(基于意见的大多数意见):
perform
,因此您可以像这样使用它:RegisterUser.new(some, args).perform
ApiService
仅包含类方法,因此您不需要实例化该类。这是module
的目的,它不能实例化,只是提供方法。URL = "https://api.themoviedb.org [...]".freeze
,然后使用它。private
CreateUser
,SendWelcomeEmail
等操作。您当前的服务对象可以命名为CreateMoviesFromJSONFeed