3

Foursquare2 Ruby ラッパーを使用して Foursquare API を呼び出していますhttps://github.com/mattmueller/foursquare2

Rails Console でクライアントを初期化すると、次のようになります。

client = Foursquare2::Client.new(:client_id =>'CLIENT_ID', :client_secret => 'CLIENT_SECRET')

次に、location_id (たとえば 5104 を使用) で Foursquare API を呼び出します。

restaurant = client.venue(5104)

これは巨大な Ruby Hashie::Mash を返します。したがって、場所のハッシュのみが必要な場合は、そうします

restaurant.location

これにより、この「ロケーションハッシュ」が得られます

#<Hashie::Mash address="4 Clinton St." cc="US" city="New York" country="United States" crossStreet="at E Houston St." lat=40.721294 lng=-73.983994 postalCode="10002" state="NY"> 

今、私がrestaurant.location.address これを返すと=> "4 Clinton St."

それでは、Rails コンソールを終了し、Rails アプリに入ります。私の質問 - Rails「レストラン」モデルでの after_save メソッド呼び出しとして、この「ロケーション ハッシュ」をモデルの「foursquare_location」列に :text フィールドとして保存しています。

レストランの住所の詳細を表示する「レストラン」ビュー テンプレートで、@restaurant.foursquare_location.address を呼び出して住所キーにアクセスして住所値を返すことができるように、テンプレートを作成するにはどうすればよいですか?

Foursquare API の応答を SQLite3 データベースの :text 列に直接保存し、ハッシュ構造を維持できるかどうかはわかりません。

ここでの助けに本当に感謝しています。

4

2 に答える 2

4

ActiveRecordserializeメソッドを使用できます。

class Restaurant < ActiveRecord::Base
  serialize :foursquare_location
end

次に、オブジェクトを の値に割り当てることができますfoursquare_location

これはうまくいくはずHashie::Mashです(私は自分で試したことはありませんが、通常のハッシュでは問題なく動作します)。一度に多数のレコードにアクセスすると、パフォーマンスがわずかに低下する可能性があり、このフィールドをクエリするのは少し難しくなりますが、説明したとおりに機能するはずです。

于 2012-10-31T02:37:19.900 に答える
1

Hashie でこの正確なアプローチを完全にテストしたわけではありませんが、おそらく ActiveRecord::Store を使用してこれを行うことができます。これにより、データベース内の 1 つの列にハッシュを格納するためのラッパーが提供されます。

http://api.rubyonrails.org/classes/ActiveRecord/Store.html

これは、私が取り組んでいる Rails アプリケーションから抜粋した例です。モデルには days_hours という列があり、実際の属性であるかのように参照できます。

class ProposedEvent < ActiveRecord::Base
  store :days_hours, accessors: [:mon, :tue, :wed, :thu, :fri, :sat, :sun]
end

IRB では:

my_event = ProposedEvent.new
my_event.days_hours = {:mon => '7, 8', :tue => '14, 15'}

これはデータベースに保存され、別の列として保存されているかのように、便利なメソッドを使用してこれにアクセスできます。

puts my_event.mon
=> "7, 8"

あなたのシナリオでうまくいくことを願っています。

于 2012-10-31T02:42:08.507 に答える