访问数组内的模型信息

时间:2015-02-20 17:33:36

标签: ruby-on-rails ruby arrays activerecord

在我的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 %>

1 个答案:

答案 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