Я работаю с вложенной формой, которая включает в себя в общей сложности 7 моделей, каждая из которых имеет разные проверки. При простом редактировании формы проверки выполняются и отображаются нормально, а данные сохраняются правильно. Однако мне нужно запустить разные проверки в зависимости от того, кто отправляет форму (т. Е. Администраторы могут пропустить некоторые другие обязательные поля).
Я думал, что смогу пропустить определенные проверки, используя attr_accessible: edit_user в моих моделях, а затем установить это в контроллере.
class ModelExample < ActiveRecord::Base
attr_accessible :editing_user
validates_presence_of :email, :unless => "editing_user == 'admin'"
end
class ModelExamplesController < ActionController::Base
def create
@model_example = ModelExample.new(params[:model_example])
@model_example.editing_user = 'admin'
@model_example.save
end
end
Я использовал эту базовую структуру во вложенных моделях, проверяя, могу ли я сохранить правильно. Вот тут и начинается странное поведение. По некоторым причинам, похоже, что ActiveRecord пытается сохранить вложенные модели несколько раз, каждый раз выполняя проверки. Что делает это странным, так это то, что я называю @ model_example.save, который должен просто вернуть false, если это не удастся. Но первая проверка проходит (так как редактирование_пользователя установлено), но последующие проверки завершаются неудачно и вызывают исключения, поэтому обычные методы .save в конечном итоге вызывают исключение, а не возвращают.
Кто-нибудь знает, как избежать того, чтобы ActiveRecord выполнял все дополнительные проверки и сохранения, или как сохранить edit_user во всех этих повторяющихся действиях?