我的数据库中有一个用户可以查询的场所,这当然会产生一个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
,但这也无效。知道如何管理这个吗?我的问题的不同方法也是受欢迎的。
答案 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