如何创建一个ActiveRecord模型,其中一些属性存储在数据库中,另一些属性从Facebook中读取



在我的应用程序中,我有一个用户对象模型。我正在使用考拉和OmniAuth访问Facebook。

我正试图弄清楚如何将来自Facebook的数据添加到我的模型中,使我的控制器能够正确地序列化它。

我已经设法在我的控制器中从Facebook获取数据,如下所示:

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

我想我已经想出了如何在没有DB列的情况下将属性添加到我的Model中,但在某种程度上会将其保留在序列化响应中:

def fb_info
  {"fb_info" =>"should be here"}
end
def attributes
  super.merge('fb_info' => fb_info)
end

那么,把它们放在一起的首选方式是什么呢?我需要以某种方式填充模型中的属性。为了做到这一点,我需要访问令牌在那里。从控制器进行调用以填充它们,或者将令牌传递给模型,这似乎很混乱。有干净的方法处理这个吗?

将setter方法添加到模型中,并在该方法中执行所有数据转换。在大多数情况下,您可以从控制器向setter方法传递数据,其方式与使用任何"real"属性完全相同。但要将这些数据存储到数据库中,您应该自己处理。

def virtual_column_name=(raw_data)
  # some code to handle raw_data and put it into database
end

最新更新