私はfb_graph api gemを見ていますが、移行にいくつかのコードがありますhttps://github.com/nov/fb_graph_sample/blob/master/db/migrate/20110623075710_create_subscriptions.rb典型的な列タイプでbelongs_to
はありません。
class CreateSubscriptions < ActiveRecord::Migration
def self.up
create_table :subscriptions do |t|
t.belongs_to :facebook
t.string :object, :fields, :verify_token
t.text :history_json
t.timestamps
end
end
def self.down
drop_table :subscriptions
end
end
通常使用される Railsの関連付けは理解しbelongs_to
has_many
ていますが、belongs_to 型の列を必要とすることはなく、データベースがその型の列を受け入れるとは思えません。
また、モデルhttps://github.com/nov/fb_graph_sample/blob/master/app/models/subscription.rbでは、belongs_to Facebook が宣言されていますが、データベース列が実際にどのように使用されているかわかりません。誰でも説明できますか?
class Subscription < ActiveRecord::Base
belongs_to :facebook
validates :facebook, :object, :fields, :history_json, :verify_token, :presence => true
before_validation :setup, :on => :create
def history
JSON.parse(self.history_json)
end
def history=(history)
self.history_json = history.to_json
end
def subscribe!(callback)
Facebook.app.subscribe!(
:object => self.object,
:fields => self.fields,
:callback_url => callback,
:verify_token => self.verify_token
)
end
private
def setup
self.verify_token = ActiveSupport::SecureRandom.hex(16)
self.history = []
end
end
Facebook.rb モデルへのリンクは次のとおりですhttps://github.com/nov/fb_graph_sample/blob/master/app/models/facebook.rb
Facebook.rb
class Facebook < ActiveRecord::Base
has_many :subscriptions
def profile
@profile ||= FbGraph::User.me(self.access_token).fetch
end
class << self
extend ActiveSupport::Memoizable
def config
@config ||= if ENV['fb_client_id'] && ENV['fb_client_secret'] && ENV['fb_scope'] && ENV['fb_canvas_url']
{
:client_id => ENV['fb_client_id'],
:client_secret => ENV['fb_client_secret'],
:scope => ENV['fb_scope'],
:canvas_url => ENV['fb_canvas_url']
}
else
YAML.load_file("#{Rails.root}/config/facebook.yml")[Rails.env].symbolize_keys
end
rescue Errno::ENOENT => e
raise StandardError.new("config/facebook.yml could not be loaded.")
end
def app
FbGraph::Application.new config[:client_id], :secret => config[:client_secret]
end
def auth(redirect_uri = nil)
FbGraph::Auth.new config[:client_id], config[:client_secret], :redirect_uri => redirect_uri
end
def identify(fb_user)
_fb_user_ = find_or_initialize_by_identifier(fb_user.identifier.try(:to_s))
_fb_user_.access_token = fb_user.access_token.access_token
_fb_user_.save!
_fb_user_
end
end
end