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