Я бы посоветовал не смешивать в новый код Python, если вы можете найти какой-либо другой способ для него (например, композиция вместо наследования или просто методы клонирования обезьян в свои собственные классы)
В классах старого стиля вы можете использовать mix-ins как способ захвата нескольких методов из другого класса. Но в мире нового стиля все, даже смешанное, наследуется от object
. Это означает, что любое использование множественного наследования естественно вводит проблемы MRO .
Существуют способы сделать работу MRO с множественным наследованием в Python, особенно в функции super (), но это означает, что вы должны выполнять всю свою иерархию классов с помощью функции super (), и значительно сложнее понять поток управления.
Создать настраиваемую проверку :
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 .
больше забавы:
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" }
Мы перешли от использования 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
Это зависит от того, как хранится ваш пароль:
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
все, что вам нужно, это создать правило проверки в вашей модели например
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