0

我想将一些来自 facebook 的数据映射到我的 User 类中。我现在阅读了一些关于继承、扩展、包含等的文章。但也许我理解错了。这是 Ruby 中数据映射的正确方法吗?

class User
    attr_accessible :name, :address

    def map_facebook
        FacebookUserMapper.new(facebook_object, self)
    end
end


class FacebookUserMapper

    def initialize(facebook_user, user)
        @facebook_user = facebook_user
        @user = user
        mapit
    end

    def self.map_it()
        username
        address
        return @user
    end

    def username
        @user.username = @facebook_user.name
    end

    def address
        @user.address = @facebook_user.address
    end     
end
4

2 回答 2

0

我会这样做:

def mapFacebook
  FacebookUserMapper.new(facebook_object, self).call
end

class FacebookUserMapper
  def initialize(facebook_user, user)
    @facebook_user = facebook_user
    @user = user
  end

  def call
    username
    address

    self
  end

  # ...
end

仅供参考:不要()在 Ruby 中添加周围的方法

于 2013-08-06T11:52:51.153 回答
0

将 facebook 对象映射到您的用户模型的更好方法是

def self.from_omniauth(auth)
  where(auth.slice(:provider, :uid)).first_or_initialize.tap do |user|
    user.provider = auth.provider
    user.uid = auth.uid
    user.name = auth.info.name
    user.oauth_token = auth.credentials.token
    user.oauth_expires_at = Time.at(auth.credentials.expires_at)
    user.save!
  end
end

auth是这里的 facebook 对象。 tap只允许您对块内的对象执行某些操作,并且始终让该块返回对象本身。

这是来自Railscasts 剧集的代码片段,您可以从中获得更多与 Facebook 相关的应用程序的帮助。

于 2013-08-06T12:25:01.257 回答