在我的应用程序中,我有一个用户对象模型。我正在使用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
那么把它们放在一起的首选方法是什么?我需要以某种方式填充我的模型中的属性。为了做到这一点,我需要访问令牌。从控制器调用填充它们或将令牌传递给模型似乎很麻烦。有没有一个干净的方法来处理这个?
答案 0 :(得分:2)
将setter方法添加到模型中,并在此方法中执行所有数据转换。在大多数情况下,您可以从控制器传递数据到setter方法,其方式与使用任何“real”属性完全相同。但是要将这些数据存储到数据库中,您应该自己处理它。
def virtual_column_name=(raw_data)
# some code to handle raw_data and put it into database
end