2011-03-31 86 views
1

現在我在我的帖子模型中使用'after_commit:share_all'來調用下面的方法將信息分享到Facebook和Twitter。我試圖檢查用戶是否擁有正確的身份驗證提供程序,如果是,則發出該共享。我的if then語句執行時出現問題

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,我想這是因爲我看到了日誌未定義的方法`的令牌」的零一個錯誤:NilClass然後有沒有發佈到twitter。如果有'臉譜'提供者,我如何才能得到第一條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

爲什麼在facebook if後面的行首有一個'then'? – Gabe 2011-03-31 04:18:07

+0

在一個多行if語句中,then是可選的。如果返回一個值,那麼在單行中是必需的。請參閱['if'](http://www.ruby-doc.org/docs/ruby-doc-bundle/Manual/man-1.4/syntax.html#if)語法。 – 2011-03-31 04:34:06

+0

如果我在使用if語句時遇到問題,首先要做的就是確保if和finally都正確排列。 – 2011-03-31 06:04:28

回答

2

我想的ActiveRecord將返回一個空數組[] 這是true儘可能紅寶石而言。我想你需要的東西,如:

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

1.嗯,事實上,使用Array類的屬性一個ActiveRecord對象。
2.除falsenil之外的所有內容均爲true

+1

謝謝,就是這樣! – 2011-03-31 08:13:48