Это действительно плохой пример. Я действительно против метода and return
короткого замыкания, потому что многие люди не понимают, что это значит, и, кроме того, его можно упустить из виду, если вы не будете внимательно следить.
Лучший подход заключается в том, что вы описываете, где у вас есть явное выражение if
, которое разделяет две возможности. Я бы пошел еще дальше, чтобы свернуть все это в один render
вызов с заранее определенным аргументом действия:
def show
@book = Book.find(params[:id])
# Determine the template to be used for this action
render_action = @book.special? ? 'special_show' : 'regular_show'
# Render the appropriate template
render(:action => render_action)
rescue ActiveRecord::RecordNotFound
render(:action => 'not_found', :status => :not_found)
end
В примере также отсутствует ловушка для вызова find
, которая может вызвать исключение, если запись не найдена. Это обычное упущение, и я уверен, что большинство людей об этом полностью забывают. Помните, что вы не должны отображать 500 «серверных ошибок» в хорошо разработанном приложении даже при получении неверных запросов.
Самый простой способ избежать двойной ошибки рендеринга - это, в конце концов, только один вызов render
.