Как высушить этот фрагмент кода Ruby? - PullRequest
0 голосов
/ 21 октября 2009

Это беспокоит меня. Это не выглядит слишком сухо. Что будет лучшей реализацией? Кроме того, почему этот искатель ActiveRecord не выдает исключение, когда запись не найдена, а .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 ]

5 голосов
/ 21 октября 2009
def current_account  
  @account ||= current_subdomain && Account.find_by_host(current_subdomain)
end

Если запись не найдена, динамические методы find_by возвращают nil, find_by_all возвращает пустой массив.

3 голосов
/ 21 октября 2009

Я бы закодировал это как

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

Что касается исключений, динамические методы find_by возвращают nil вместо генерации исключения. Если вы хотите исключение, используйте find с :conditions:

def current_account
  @account ||= current_subdomain.blank? ? nil : Account.find(:first, :conditions => {:host  => current_subdomain})
end
0 голосов
/ 12 января 2014
def current_account  
  @account ||= current_subdomain.present? && Account.find_by_host(current_subdomain)
end

#present? будет обрабатывать nil и пустые строки

0 голосов
/ 21 октября 2009

Как насчет:

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