Можно ли сделать только один вызов БД в проверке уникальности ActiveRecord? - PullRequest
0 голосов
/ 09 сентября 2018

Я изучаю учебное пособие по RoR и занимаюсь проверкой моделей. Вот так выглядит моя модель:

class User < ApplicationRecord
  validates(:name,
    presence: true,
    length: { maximum: 80 },
    uniqueness: { case_sensitive: false },
  )

  validates(:pass,
    presence: true,
  )

  validates(:email,
    presence: true,
    length: { maximum: 254 },
    format: { with: /.*@.*\..*/ },
    uniqueness: { case_sensitive: false },
  )

  before_save { email.downcase! }
end

однако, что я заметил в rails console, это то, что это производит два sql запроса с каждым .valid? вызовом.

[wolf@devel web]$ r console --sandbox
Running via Spring preloader in process 20864
Loading development environment in sandbox (Rails 5.2.1)
Any modifications you make will be rolled back on exit
2.5.0 :001 > User.new.valid?
  User Exists (0.4ms)  SELECT  1 AS one FROM "users" WHERE "users"."name" IS NULL LIMIT $1  [["LIMIT", 1]]
  User Exists (0.3ms)  SELECT  1 AS one FROM "users" WHERE "users"."email" IS NULL LIMIT $1  [["LIMIT", 1]]
 => false 

требуется ли это для сообщения о том, какие проверки были нарушены? Это можно обойти чтобы уменьшить количество поездок в БД?

...