Мне нужна помощь с моей моделью ActiveRecord. У меня есть контекстные проверки (неправильно) с использованием встроенных параметров контекста для проверок:
validates :foo, :on => :bar, :presence => true
model = Model.new
model.foo = nil
model.valid? # => true
model.save # works as expected
model.valid?(:bar) # => false
model.save(:context => :bar) # fails and returns false
Но использование моей модели в accepts_nested_attributes_for :model
и вызов parent.save
не удается (проверка вызывается и возвращает false), какие-либо предложения или решения?
Все еще нет ответа? Чтобы объяснить больше о моей проблеме: у меня есть модель с именем Form
, которая имеет много Field
с. Пользователи должны видеть ошибки проверки при отправке, но форма должна быть сохранена в любом случае (с ошибками и без них). Существуют различные типы Field
s, каждый из которых имеет глобальные проверки (для обеспечения согласованности базы данных) и свои собственные определенные пользователем проверки (для проверки введенных пользователем данных). Так что мои Field
выглядят так:
# Global validations, to ensure database consistency
# If this validations fail, the record should not be saved!
validates_associated :form, :on => :global
...
# Specific user-defined validations
# If this validations fail, the record should be saved but marked as invalid. (Which is done by a before_save filter btw.)
def validate
validations.each do |validation| # Array of `ActiveModel::Validations`, defined by the user and stored in a hash in the database
validation.new(:on => :specific).validate(self)
end
end
В моем контроллере:
# def create
# ...
form.attributes = params[:form]
form.save!(:global)
form.save(:specific)
Возможно ли нечто подобное в Rails, использующем встроенную функциональность? Кстати, это не мой настоящий код, который довольно сложен. Но я надеюсь, что вы, ребята, поймете идею.