1

私のアプリケーションには、ユーザー オブジェクト モデルがあります。私は koala と OmniAuth を使用して Facebook にアクセスしています。

コントローラーがデータを適切にシリアル化するように、Facebook からモデルにデータを追加する方法を見つけようとしています。

次のように、コントローラーで Facebook からデータを取得することができました。

token = request.env["omniauth.auth"]["credentials"]["token"]
api = Koala::Facebook::API.new(token)
api.get_object("me")

そして、DB列なしでモデルに属性を追加する方法を考え出したと思いますが、それをシリアル化された応答に保持する方法で:

def fb_info
  {"fb_info" =>"should be here"}
end

def attributes
  super.merge('fb_info' => fb_info)
end

では、すべてをまとめるにはどのような方法が望ましいのでしょうか? モデルに何らかの属性を設定する必要があります。そのためには、そこにアクセス トークンが必要です。コントローラーから呼び出してそれらを設定したり、トークンをモデルに渡したりするのは面倒です。これを処理するきれいな方法はありますか?

4

1 に答える 1

2

モデルに setter メソッドを追加し、このメソッド内ですべてのデータ変換を実行します。ほとんどの場合、「実際の」属性で行う場合とまったく同じ方法で、コントローラーからセッター メソッドにデータを渡すことができます。ただし、このデータをデータベースに保存するには、自分で処理する必要があります。

def virtual_column_name=(raw_data)
  # some code to handle raw_data and put it into database
end
于 2012-07-24T12:37:13.910 に答える