Возможно ли нечто подобное в Rails, использующем встроенную функциональность? Кстати, это не мой настоящий код, который довольно сложен. Но я надеюсь, что вы, ребята, поймете идею.

ужна помощь с моей моделью 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 не удается (проверка вызывается и возвращает ложь), какие-либо предложения или решения?

Все еще нет ответа? Чтобы объяснить больше о моей проблеме: у меня есть модель под названиемForm который имеет многоFields. Пользователи должны видеть ошибки проверки при отправке, но форма должна быть сохранена в любом случае (с ошибками и без них). Есть разные типыFields, каждая из которых имеет глобальные проверки (для обеспечения согласованности базы данных) и свои собственные определенные пользователем проверки (для проверки введенных пользователем данных). Так что мой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, использующем встроенную функциональность? Кстати, это не мой настоящий код, который довольно сложен. Но я надеюсь, что вы, ребята, поймете идею.

Ответы на вопрос(0)

Ваш ответ на вопрос