0

これは私を悩ませています。それはあまりにもDRYに見えません。より良い実装は何でしょうか? 余談ですが、この ActiveRecord finder は、レコードが見つからない場合に例外をスローしないのに、.find は例外をスローするのはなぜですか?

  def current_account
    return @account if @account
    unless current_subdomain.blank?
      @account = Account.find_by_host(current_subdomain)
    else
      @account = nil
    end
    @account
  end
4

4 に答える 4

5
def current_account  
  @account ||= current_subdomain && Account.find_by_host(current_subdomain)
end

レコードが見つからない場合、動的find_byメソッドは nil をfind_by_all返し、空の配列を返します。

于 2009-10-21T17:00:34.373 に答える
3

私はこれを次のようにコーディングします

def current_account
  @account ||= current_subdomain.blank? ? nil : Account.find_by_host(current_subdomain)
end

例外に関しては、find_by 動的メソッドnilは例外をスローする代わりに戻ります。例外が必要な場合は、with を使用find:conditionsます。

def current_account
  @account ||= current_subdomain.blank? ? nil : Account.find(:first, :conditions => {:host  => current_subdomain})
end
于 2009-10-21T17:05:54.357 に答える
0
def current_account  
  @account ||= current_subdomain.present? && Account.find_by_host(current_subdomain)
end

#present?nil空の文字列を処理します

于 2014-01-11T21:07:36.940 に答える
0

どうですか:

def current_account
  @account ||= Account.find_by_host(current_subdomain) unless current_subdomain.blank?
end
于 2009-10-21T16:59:58.317 に答える