在我的rails应用程序中,我正在调用返回3位不同艺术家的第三方API。我想首先保存记录,如果它们在ActiveRecord中不存在,然后在我的视图中显示相同的记录,但是取自ActiveRecord,而不是API调用。
我的第一个想法是创建一个保留所有e_id
的数组,然后使用相同的e_id
进行where
搜索。
数组最终会从数据库中获取正确的艺术家,但在尝试访问信息时,它只会提供模型信息。
例如,s.name
将返回“艺术家”。
任何想法如何解决这个问题?
apicall = API.artist_similar(:id => band.e_id, :results => 3)
@similar_artists = []
echonest_similar.each do |artist|
if Artist.exists?(:e_id => artist.id)
apicall.delete(band)
else
newartist = Artist.new(:name => artist.name, :echo_id => artist.id)
newartist.save
end
@similar_artists << Artist.where(:e_id => artist.id)
end
<% @similar_artists.each do |s| %>
<h4><%= s.name %></h4>
<% end %>
答案 0 :(得分:2)
你在这里打了太多次数据库。你可以做的是使用ActiveRecord#first_or_create:
apicall = API.artist_similar(:id => band.e_id, :results => 3)
@similar_artists = []
echonest_similar.each do |artist|
@similar_artists << Artist.first_or_create(name: artist.name, echo_id: artist.id)
end