Как вы можете принудительно проверить все поля вложенных моделей, даже если они не изменились? (Rails 3.1) - PullRequest
3 голосов
/ 21 сентября 2011

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

Однако предположим, что ваши правила проверки изменились, так что одна или несколько редактируемых вложенных моделей больше не считаются действительными. Как вы можете заставить Rails повторно проверять все поля для всех вложенных моделей?

UPDATE

Вот полный взлом, который работает. Надеюсь, кто-нибудь знает более элегантный подход.

# parent.rb

has_many :children

# Manually force validation of all the children.
# This is lame because if you have multiple child associations, you'll have to 
# keep updating this method.
def reset_validation
   self.children.each{|child| child.valid? }
   self.valid?
end

# parent_controller.rb
def update
  @parent.reset_validation

  if @parent.update_attributes(params[:parent])
    redirect_to(root_path, :notice => 'Parent successfully updated.')
  else
   render :action => "edit"
  end
end

1 Ответ

6 голосов
/ 22 сентября 2011

Ответ на этот вопрос оказался довольно простым.В родительской модели вы просто явно заявляете, что хотите, чтобы связанные дочерние элементы были проверены.

# parent.rb
validates_associated :children
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...