Domanda

Questo mi dà fastidio. Non sembra troppo ASCIUTTO. Quale sarebbe una migliore attuazione? A parte questo, come mai questo finder ActiveRecord non genera un'eccezione quando il record non viene trovato, ma .find lo fa?

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

Soluzione

Lo codificherei come

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

Per quanto riguarda le eccezioni, i metodi dinamici find_by restituiscono nil invece di generare un'eccezione. Se si desidera un'eccezione, utilizzare find con : condizioni :

def current_account
  @account ||= current_subdomain.blank? ? nil : Account.find(:first, :conditions => {:host  => current_subdomain})
end

Altri suggerimenti

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

Se non viene trovato un record, i metodi dinamici find_by restituiscono zero, find_by_all restituisce un array vuoto.

Che ne dici di:

def current_account
  @account ||= Account.find_by_host(current_subdomain) unless current_subdomain.blank?
end
def current_account  
  @account ||= current_subdomain.present? && Account.find_by_host(current_subdomain)
end

#present? gestirà zero e stringhe vuote

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top