我正在使用Rails 3.2,我从Foursquare获取场地。我需要检查我得到的任何场地ID是否已在我的数据库中注册,然后返回该阵列。我尝试这样做它并且它工作但是我得到所有那些不存在的场地的nil(在阵列中)。我的代码出了什么问题,有没有更好的方法,所以我不需要做20个查询(每个FQ场地对数据库进行一次查询)。
def index
client = Foursquare::Base.new(CLIENT_KEY, SECRET_KEY)
@venues = client.venues.search(:ll => "-33.8670522, 151.1957362")
output = @venues["nearby"].collect do |venue|
account = Account.find_by_fq_venue (venue.id) if account.present?
end
render :json => output, :status => :success
end
更新
我最终解决了这个问题:
client = Foursquare::Base.new(CLIENT_KEY, SECRET_KEY)
venues = client.venues.search(:ll => "-33.8670522, 151.1957362")
ids = venues["nearby"].collect { |venue| venue.id }
@output = Account.find_all_by_fq_venue (ids)
render :json => @output, :status => :success
答案 0 :(得分:1)
更改
account = Account.find_by_fq_venue (venue.id) if account.present?
要
account = Account.find_by_fq_venue (venue.id) if Account.find_by_fq_venue (venue.id)
我只是解释为什么在分配给它的值之前使用account
会出错,因此你的if条件总是不满足而且你得到的是零。
更好的方法是这样做 变化
output = @venues["nearby"].collect do |venue|
account = Account.find_by_fq_venue (venue.id) if account.present?
end
要
output = Account.find(:all,
:conditions =>["fq_venue IN (?)", @venues["nearby"].map(&:id) ])
对于Rails 3
output = Account.where(["fq_venue IN (?)", @venues["nearby"].map(&:id) ])
答案 1 :(得分:0)
嗨,你试试这个。
帐户= []
output = @venues["nearby"].collect do |venue|
account << Account.find_by_fq_venue (venue.id) if !venue.id.nil?
end
现在在帐户数组中,您将获得所有行。
- Viji Kumar。