Аутлогический конфиг Ruby on rails (избавьтесь от проверки заглавных букв) - PullRequest
3 голосов
/ 21 мая 2010

Gem authlogic rails делает НИЖЕ в запросе sql.

SELECT * FROM `users` WHERE (LOWER(`users`.email) = 'test@example.com') LIMIT 1

Я хочу избавиться от НИЖНЕЙ части, так как она, кажется, немного замедляет запрос. Я бы предпочел просто уменьшить регистр в коде, так как этот запрос кажется дорогим.

Я не уверен, где изменить это поведение в authlogic.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 21 мая 2010

Этот комментарий от lib/authlogic/acts_as_authentic/login.rb выше find_by_smart_case_login_field метода:

    # This method allows you to find a record with the given login. If you notice, with ActiveRecord you have the
    # validates_uniqueness_of validation function. They give you a :case_sensitive option. I handle this in the same
    # manner that they handle that. If you are using the login field and set false for the :case_sensitive option in
    # validates_uniqueness_of_login_field_options this method will modify the query to look something like:
    #
    #   first(:conditions => ["LOWER(#{quoted_table_name}.#{login_field}) = ?", login.downcase])
    #
    # If you don't specify this it calls the good old find_by_* method:
    #
    #   find_by_login(login)
    #
    # The above also applies for using email as your login, except that you need to set the :case_sensitive in
    # validates_uniqueness_of_email_field_options to false.
    #
    # The only reason I need to do the above is for Postgres and SQLite since they perform case sensitive searches with the
    # find_by_* methods.

Вы устанавливаете case_sensitive = false в своем подтверждении электронной почты? Если это так, устранение этого должно решить эту проблему без необходимости исправления какого-либо кода.

2 голосов
/ 15 июля 2010

Просто дополнительная заметка.Код должен быть передан в блоке act_as_authentic

  acts_as_authentic do |c|
      c.validates_uniqueness_of_email_field_options :case_sensitive => true
  end  
...