我的if then语句执行有问题

时间:2011-03-31 04:12:11

标签: ruby-on-rails ruby ruby-on-rails-3 if-statement

现在我在我的帖子模型上使用'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

当一个用户只有一个Twitter提供者时,第一部分似乎仍然执行user.facebook_share,我想这是因为我在nil:NilClass的未定义方法`token'的日志中看到一个错误然后没有帖子到推特。如果有'facebook'提供者,如何才能执行第一个if语句,如果没有'twitter'提供者,如果没有继续执行第二个if语句?

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 个答案:

答案 0 :(得分:2)

我认为ActiveRecord返回一个空数组[] 1 ,就{<1}}而言,就Ruby 2 而言。我想你需要这样的东西:

true

1。实际上,一个具有类似数组属性的ActiveRecord对象。
2。除def share_all if user.authentications.where(:provider => 'facebook').any? user.facebook_share(title, content, item_name) end ... false之外的所有内容均为nil。功能