将新对象添加到ActiveRecord :: Relation

时间:2014-11-20 18:19:23

标签: ruby-on-rails rails-activerecord foursquare

我的数据库中有一个用户可以查询的场所,这当然会产生一个ActiveRecord::Relation对象。

有时在用户搜索的区域内没有足够的场地,所以我想用它们的API Foursquare结果填充它。由于这些结果与我的场地格式不同,我决定将它们转换为我的Venue对象,并将它们添加到查询结果中,但无论我尝试什么似乎都失败了。这是相关的代码块:

@venues = @venues.limit(30)
if @venues.count(:all) < 30
  foursquare_client = foursquare_client()
  fq_venues = foursquare_client.explore_venues(ll: params[:ll], radius: 1000, limit: 30 - @venues.count(:all), section: 'food')
  for item in fq_venues.groups[0].items
    fq_venue = item.venue
    location = Location.build_from_foursquare(fq_venue)
    @venues.build(name: fq_venue.name, foursquare_id: fq_venue.id, location: location)
  end
end

@venues之后不包含新创建的Venue个对象。我也尝试使用<<将其添加到Relation,但这也无效。知道如何管理这个吗?我的问题的不同方法也是受欢迎的。

1 个答案:

答案 0 :(得分:2)

@venues转换为数组并添加到数组。 @venues.build会返回一个新对象。但它不会自动添加到集合中。

@venues = @venues.limit(30)
if @venues.all.count < 30 #this converts @venues to array
  foursquare_client = foursquare_client()
  fq_venues = foursquare_client.explore_venues(ll: params[:ll], radius: 1000, limit: 30 -     @venues.count(:all), section: 'food')
  for item in fq_venues.groups[0].items
    fq_venue = item.venue
    location = Location.build_from_foursquare(fq_venue)
    @venues << @venues.build(name: fq_venue.name, foursquare_id: fq_venue.id, location: location)
  end
end