Проблема с выполнением операторов if if - PullRequest
1 голос
/ 31 марта 2011

Прямо сейчас я использую '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

1 Ответ

2 голосов
/ 31 марта 2011

Я думаю, что ActiveRecord возвращает пустой массив [] 1 , который равен true для Ruby 2 .Я полагаю, вам нужно что-то вроде:

def share_all
  if user.authentications.where(:provider => 'facebook').any?
    user.facebook_share(title, content, item_name)
  end
  ...

1.Ну, на самом деле, объект ActiveRecord с атрибутами, подобными массиву.
2.Все, кроме false и nil, является true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...