現在我在我的帖子模型中使用'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
爲什麼在facebook if後面的行首有一個'then'? – Gabe 2011-03-31 04:18:07
在一個多行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
如果我在使用if語句時遇到問題,首先要做的就是確保if和finally都正確排列。 – 2011-03-31 06:04:28