我正在获取有关世界所有国家/地区的开放数据,并且需要能够解析该JSON文件,以便提取每个国家/地区的相关内容并将其存储到我的数据库中。
我不清楚应该在哪里编写逻辑来解析这些数据,并在模型或控制器中将每个国家/地区的每个相关部分保存在数据库中?我几乎把它放在控制器的根索引中,以便在用户访问后立即开始解析,但是我感觉这与胖模型(瘦控制器)的常规不符。
任何和所有帮助将不胜感激。谢谢!
完全正确的做法是,将所有逻辑放在控制器中将违反瘦控制器。
一种实现方法是通过模型上的方法来解析api中的数据:
class Cat < ActiveRecord::Base
def self.create_from_kittypix_api(data, &block)
model = self.new(attrs_from_some_api(data))
yield(model, data) if block_given?
model
end
def self.attrs_from_kittypix_api(data)
{
foo: data[:bar]
}
end
end
这样做的缺点是您的模型最终对外部API了解得太多,并且一次创建多个模型可能会导致责任混淆。
一种较新的方法是使用服务,它们是普通的旧红宝石对象,它们接受输入并完成给定的任务。
class KittypixImportService
def self.call(kitty_pix_id)
client = KittyPixClient.new
result = client.get_kitty(id: kitty_pix_id)
Cat.new(
foo: result['bar']
)
end
end
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句