В Ruby on Rails, какой тип шаблона проектирования должен использовать false, чтобы обозначить, что DB не смотрит вверх, и nil, чтобы обозначить ok, чтобы искать? - PullRequest
0 голосов
/ 24 февраля 2011

В Restful Authentication , я обнаружил, что current_user довольно сложно, что, когда @current_user установлено в false, это означает, что не пытаться снова найти пользователя (обычно из БД),в то время как nil означает, что все в порядке, можно снова искать в БД:

Строка 8 из lib/authenticated_system.rb

def current_user
  @current_user ||= (login_from_session 
                      || login_from_basic_auth 
                      || login_from_cookie) unless @current_user == false
end

сложная вещь, если она пытается найти БД изlogin_from_session и т. Д., И он не может найти его, тогда последнее значение, присвоенное @current_user, равно nil, и метод возвращает nil (что является последним оцененным значением в методе).Если в другом месте кода нет двух других мест, которые на самом деле могут установить @current_user в false, и это вызовет unless, в результате чего весь оператор вернет nil, тогда как @current_user останется как false, иметод возвращает nil ...

Я почти потерял дар речи, когда код полагался на эти запутанные факты.false имеет особое значение, а nil имеет особое значение в коде, но не документируется, не комментируется, и current_user может принимать значение nil, тогда как @current_user может оставаться равным false.Это на самом деле шаблон дизайна, так что люди знакомы с ним и знают это хорошо?

1 Ответ

1 голос
/ 24 февраля 2011

RestfulAuthentication считается довольно старой и неприятной на данный момент в истории Rails, частично из-за кода, подобного тому, на который вы указываете.

Я думаю, что большинство людей посоветовали бы вам использовать более современное решение для аутентификации, такое как Devise или Authlogic.

...