Получите проверки модели Rails - PullRequest
3 голосов
/ 16 июня 2009

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 16 июня 2009

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

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

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

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

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

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

0 голосов
/ 16 июня 2009

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

unless x.valid?
  [:field1,:field2].each do |field|
    yes_there_was_an_error if x.errors[field]
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...