我希望在模型调用中保存每个JSON对象,这样我每次加载应用程序时都不必调用API,而是调用所有模型条目。
ArrayList<String[]> data = (ArrayList<String[]>) getIntent().getSerializableExtra(EXTRA_MESSAGE);
这是我目前在我的模型中所拥有的,它完美地调用API并在我的视图中显示它们中的每一个。显然这不是最好的方法,我想将每个JSON的URL属性保存到我的模型中 - 不完全确定如何执行此操作!
答案 0 :(得分:2)
从您的评论中,您似乎希望为响应JSON对象中的每个值创建一个新实例。
require 'httparty'
require 'json'
class Feed < ActiveRecord::Base
include HTTParty
base_uri 'https://www.parsehub.com/api/v2/projects'
has_many :image_urls
def fetch_image_urls
response = self.class.get("/tVv8nTahbhgkyIUW8ByCe0-7/last_ready_run/data?&format=json")
@elements = response.parsed_response["image"]
@elements.map do |image_info|
self.image_urls.create(url: image_info['url'])
end
end
end
class ImageUrl < ActiveRecord::Base
belongs_to :feed
# add_colum(:image_urls, :url, :string)
end
然后,使用这种新方法...
feed = Feed.find(id)
feed.image_urls # => []
feed.fetch_image_urls # => [<ImageUrl url:http://example.com>, ...]
feed.image_urls # => [<ImageUrl url:http://example.com>, ...]
答案 1 :(得分:1)
如果您使用的是Postgres(我不推荐),您可以在HStore列中存储哈希(而不是JSON)。这将允许您将所有JSON保存在一个字段中。您的代码中没有此名称,因此我们将其称为info
。
要访问信息,您可以定义方法。
class Feed < ActiveRecord::Base
def image
@info[:image]
end
def url
@info[:url]
end
要保存信息,
def boom
...
@parsed = @elements.collect { |e| e['url'] }
@info = @parsed
save
end
如果您的图像模型包含您要创建的字段名称,
def boom
...
@elements = response.parsed_response["image"]
@image_urls = @elements.collect { |e| e['url'] }
@image_urls.each do |url|
Image.create(url:url)
end
end
答案 2 :(得分:0)
您可以将整个JSON保存在模型/表的字段中,然后可以通过JSON.parse
方法获得相同的JSON。