Как я проверяю это, два значения не равняются друг другу в модели Rails?

Я бы посоветовал не смешивать в новый код Python, если вы можете найти какой-либо другой способ для него (например, композиция вместо наследования или просто методы клонирования обезьян в свои собственные классы)

В классах старого стиля вы можете использовать mix-ins как способ захвата нескольких методов из другого класса. Но в мире нового стиля все, даже смешанное, наследуется от object. Это означает, что любое использование множественного наследования естественно вводит проблемы MRO .

Существуют способы сделать работу MRO с множественным наследованием в Python, особенно в функции super (), но это означает, что вы должны выполнять всю свою иерархию классов с помощью функции super (), и значительно сложнее понять поток управления.

26
задан John Feminella 16 February 2010 в 13:35
поделиться

5 ответов

Создать настраиваемую проверку :

validate :check_email_and_password

def check_email_and_password
  errors.add(:password, "can't be the same as email") if email == password
end

Но имейте в виду, что хранить пароль в виде простого текста - плохая идея. Вы должны хранить его в хешированном виде. Попробуйте какой-нибудь плагин аутентификации, например authlogic или Restful authentication .

29
ответ дан 28 November 2019 в 06:55
поделиться

больше забавы:

  validates :password, exclusion: { in: ->(person) { [person.email] }, message: "cannot use protected password" }

, который мог бы быть еще лучше в этом случае, так как Вы могли проверить на другие запрещенные значения с чем-то как

  validates :password, exclusion: { in: ->(person) { [person.email, person.first_name, person.last_name, person.phone_number, person.department_name] }, message: "cannot use protected password" }
0
ответ дан 28 November 2019 в 06:55
поделиться

Мы перешли от использования IIS к использованию настраиваемого веб-сервера, построенного с помощью StartListener. IIS накладывает ограничения на ресурсы и выполняет отладку любых других ASP.NET веб- приложения. Запуск его в другом домене приложений сводит к минимуму, но не устраняет проблему.

-121--4818144-

В MySQL:

$query1 = 'UPDATE `table` SET rating = (@rating:= rating) + 1 WHERE id = 1';
$query2 = 'select @rating';
-121--5044362-

Для проверки можно использовать пользовательский метод проверки.

class User < ActiveRecord::Base
  # ...

  def validate
    if (self.email == self.password)
      errors.add(:password, "password cannot equal email")
      errors.add(:email, "email cannot equal password")
    end
  end
end
6
ответ дан 28 November 2019 в 06:55
поделиться

Это зависит от того, как хранится ваш пароль:

class User < ActiveRecord::Base
    validate :email_and_password_validation

    def email_and_password_validation
        if self.email == self.password
            errors.add_to_base("Password must be different from email") 
        end
    end
end

Это будет работать, если ваш пароль хранится буквально, но вы можете сделать то же самое с электронной почтой (например, создать хешированную версию) и проверить на соответствие паролю. Например:

class User < ActiveRecord::Base
    validate :email_and_password_validation

    def email_and_password_validation
        if make_hash(self.email) == self.hashed_password
            errors.add_to_base("Password must be different from email") 
        end
    end
end

Мой пример взят из http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#M002162

Ваша ситуация довольно общая, поэтому вы можете быть заинтересованы в создании пользовательских метод проверки. Здесь описано все: http://guides.rubyonrails.org/active_record_validations_callbacks.html#creating-custom-validation-methods

4
ответ дан 28 November 2019 в 06:55
поделиться

все, что вам нужно, это создать правило проверки в вашей модели например

class User < ActiveRecord::Base
  def validate_on_create
    if email == password
      errors.add("password", "email and password can't be the same")
    end
  end
end
1
ответ дан 28 November 2019 в 06:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: