Вопрос

Учитывая модель, которая имеет проверки в файле model_name.rb, как я могу получить доступ к этим проверкам вручную?Я хотел бы создать свою собственную систему проверки форм, которая бы работала вместе со встроенными приемами Rails, и я хочу, чтобы все было максимально СУХИМ.Моя основная проблема заключается в том, что мне нужно выполнить проверку на стороне сервера, прежде чем какое-либо значение формы попадет в базу данных (я использую многошаговую форму).

В принципе мне интересно, есть ли такой метод, как

User.validations.each do |v|
    puts v.constraint.to_s + " " + v.message
end

Есть ли что-нибудь подобное?

Заранее спасибо.

Это было полезно?

Решение

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

Если ваша модель недействительна в соответствии с проверками в ее файле класса, ее данные не будут сохранены в базе данных (если вы не передадите false к save метод подавления проверок).

  • Вы можете в любой момент спросить модель, действительна ли она, вызвав ее valid?/invalid? методы.

Другие советы

Объект ActiveRecord предоставляет метод ошибок после допустимого? называется, который дает вам сообщения о том, какие проверки нарушены. Вы можете проверить действительный? и затем проверьте, являются ли какие-либо поля в части формы, на которой вы находитесь, недействительными. Вы можете сделать что-то подобное для формы с полями field1 и field2.

unless x.valid?
  [:field1,:field2].each do |field|
    yes_there_was_an_error if x.errors[field]
  end
end

Лучше всего использовать конечный автомат и сохранять данные в базе данных между различными этапами формы.

Вы можете сделать, например, validates_presence_of: имя пользователя,: if = > proc {| u | u.signup_step > = 2} , где signup_step - это целочисленный столбец в базе данных.

Итак, даже если вы говорите, что не хотите хранить его в базе данных между формами, я думаю, вам следует. Если вы сделаете это, вы можете использовать обычные проверки и модели, без неприятных хаков. И, честно говоря, я сомневаюсь, что сделать это таким образом, является проблемой.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top