Прямо сейчас я использую 'after_commit: share_all' в моей модели сообщений, чтобы вызвать метод, ниже которого делится информацией в Facebook и Twitter. Я пытаюсь проверить, есть ли у пользователя правильный провайдер аутентификации, и если да, то выпустить общий ресурс.
def share_all
if user.authentications.where(:provider => 'facebook')
then user.facebook_share(title, content, item_name)
end
if user.authentications.where(:provider => 'twitter')
user.twitter_share(title, content, item_name)
end
end
Когда у пользователя есть только провайдер твиттера, первая часть, кажется, все еще выполняет user.facebook_share, я думаю, что это потому, что я вижу ошибку в журнале неопределенного метода `token 'для nil: NilClass, а затем нет сообщения для щебет. Как получить первый оператор if только для выполнения, если есть поставщик «facebook», а если нет, перейти к выполнению второго оператора if, если есть поставщик «twitter»?
def facebook_share(title, content, item_name)
facebook.feed!(
:message => "#{title} #{item_name} #{content}"
)
конец
def facebook
unless @fb_user
provider = self.authentications.find_by_provider('facebook')
@fb_user ||= FbGraph::User.me(provider.token)
end
@fb_user
end
def twitter
unless @twitter_user
provider = self.authentications.find_by_provider('twitter')
@twitter_user = Twitter::Client.new(:oauth_token => provider.token, :oauth_token_secret => provider.secret) rescue nil
end
@twitter_user
end
def twitter_share(title, content, item_name)
twitter.update("#{title} #{item_name} #{content}")
end