Я хочу иметь возможность пропустить проверку, если для определенного атрибута установлено значение false, скажем, состояние, проблема в том, что в этой модели много вложенных атрибутов, и им также нужно пропустить проверку, если состояние имеет значение false.
Цель такой имплантации состоит в том, что, если кто-то хочет сохранить черновик записи формы, по какой-либо причине проведение его проверки может остановить их сохранение, что не является желательным поведением, и нужно толькопроверить записи, которые становятся общедоступными, установив статус в true.
Пример ниже
атрибут атрибута status находится в Article
model Article
has_many :sub_articles
accepts_nested_attributes_for :sub_articles, :allow_destroy => true
validate_presence_of :body, :unless => Proc.new{|article| !article.status }
model SubArticle
belongs_to :article
has_many :foos
accepts_nested_attributes_for :foos, :allow_destroy => true
validate_presence_of :body, :unless => Proc.new{|sub_article| !sub_article.article.status }
model Foo
belongs_to :sub_article
validate_presence_of :body, :unless => Proc.new{|foo| !foo.sub_article.article.status }
проверка пропуска для Article будет работать, но не будетдля SubArticle или Foo, поскольку они не были сохранены и там не установлены идентификаторы, что не позволяет им проходить по ассоциациям, как в примере.
Можно ли получить доступ к связанным атрибутам таблицы в точке проверки?
Любая помощь будет принята с благодарностью.
------ Обновлено -----
Причина, по которой валидация для SubArticle и Foo завершилась неудачей, заключается в том, что
неопределенный метод `status 'для nil: NilClass
Это ожидаетсяиз-за времени проверки article_id или sub_article_id все еще ноль, я подтвердил это, выполнив
model SubArticle
belongs_to :article
has_many :foos
validate_presence_of :body, :unless => Proc.new{|sub_article| !sub_article.article.check_attributes }
def check_attributes
pp self
end
, ведьма дает
#<SubArticle id: nil, body: "", article_id: nil, created_at: nil, updated_at: nil >
----- обновлено 2----------
Я забыл и важную деталь, все данные для моделей вводятся сразу с использованием вложенной формы, поэтому на момент создания все записи на всехмодели находятся только в памяти, исправляя пример кода, чтобы это было более очевидно.