Come ASCIUGARE questo frammento di codice Ruby?
-
05-07-2019 - |
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
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