0
0
Fork 0

Fix db:seed - only run some validations when the field was changed (#3592)

* Fix db:seed - only run some validations when the field was changed

* Add tests
This commit is contained in:
Eugen Rochko 2017-06-08 15:22:01 +02:00 committed by Matt Jankowski
parent b87eb8ea14
commit c207b4bb33
5 changed files with 23 additions and 6 deletions

View file

@ -52,13 +52,17 @@ class Account < ApplicationRecord
has_one :user, inverse_of: :account
validates :username, presence: true
validates :username, uniqueness: { scope: :domain, case_sensitive: true }, unless: :local?
# Remote user validations
with_options unless: :local? do
validates :username, uniqueness: { scope: :domain, case_sensitive: true }, if: :username_changed?
end
# Local user validations
with_options if: :local? do
validates :username, format: { with: /\A[a-z0-9_]+\z/i }, uniqueness: { scope: :domain, case_sensitive: false }, length: { maximum: 30 }, unreserved: true
validates :display_name, length: { maximum: 30 }
validates :note, length: { maximum: 160 }
validates :username, format: { with: /\A[a-z0-9_]+\z/i }, uniqueness: { scope: :domain, case_sensitive: false }, length: { maximum: 30 }, unreserved: true, if: :username_changed?
validates :display_name, length: { maximum: 30 }, if: :display_name_changed?
validates :note, length: { maximum: 160 }, if: :note_changed?
end
# Timelines

View file

@ -47,7 +47,7 @@ class User < ApplicationRecord
accepts_nested_attributes_for :account
validates :locale, inclusion: I18n.available_locales.map(&:to_s), if: :locale?
validates :email, email: true
validates :email, email: true, if: :email_changed?
scope :recent, -> { order(id: :desc) }
scope :admins, -> { where(admin: true) }