0

Rails 3.2を使用しており、Foursquareから会場を取得しています。返される会場IDのいずれかがデータベースに登録されているかどうかを確認してから、その配列を返す必要があります。私はこの方法でそれを行おうとしますが、それは機能しますが、存在しないすべての会場で(配列内で)nilになります。私のコードの何が問題になっていますか。これを行うためのより良い方法があるので、20回のクエリを実行する必要はありません(FQ会場ごとにデータベースに対して1回のクエリ)。

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
4

2 に答える 2

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条件が常に満たされておらず、nilのaaryが得られます。

これを行うより良い方法は変更です

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) ])
于 2012-10-12T10:26:52.020 に答える
0

こんにちは、これで試してみてください。

アカウント=[]

output = @venues["nearby"].collect do |venue|
  account << Account.find_by_fq_venue (venue.id) if !venue.id.nil?
end

アカウント配列では、すべての行が取得されます。

-- ヴィジ・クマール。

于 2012-10-12T10:55:03.740 に答える