Мне нужна помощь с моим 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
Но при использовании моей модели в accept_nested_attributes_for: model
и вызове parent.save
не удается (вызывается проверка и возвращается false), какие-либо предложения или решения?
По-прежнему нет ответ? Чтобы подробнее объяснить мою проблему: у меня есть модель под названием Form
, которая имеет много Field
s. Пользователи должны видеть ошибки проверки при отправке, но форма все равно должна быть сохранена (с ошибками и без них). Существуют различные типы Поля
, каждое из которых имеет глобальные проверки (для обеспечения согласованности базы данных) и свои собственные определенные пользователем проверки (для проверки введенных пользователем данных). Итак, мои Поле
выглядят примерно так:
# 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 с использованием встроенных функций? Кстати, это не мой настоящий код, что довольно сложно. Но я надеюсь, вы, ребята, уловили идею.