如何检查查询是否返回结果?

时间:2012-10-12 10:22:25

标签: ruby-on-rails foursquare

我正在使用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

2 个答案:

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