У меня есть модельная статья, например. Статья имеет_один ArticleContent. ArticleContent имеет проверку всех своих атрибутов по умолчанию. Но мне нужен дополнительный функционал - сохранить черновик статьи без какой-либо проверки. Поэтому я передаю :draft => false в качестве одного из параметров в Article.new(), затем я делаю @article.build_article_content(). В ArticleContent есть нерабочий код:
def draft?
raise self.article.draft
end
validates_presence_of :header, :message => "We have no fuckin' header!", :unless => :draft?
Конечно это не работа. В момент драфта? выполнения нигде нет подходящего объекта Article, поэтому self.article возвращает nil. Хорошая попытка, codemonkey...
У кого-нибудь есть сладкие идеи? Думаю сделать @content.save! это не очень хорошая идея
ОБНОВЛЕНИЕ
Я пробовал так:
def draft
self[:draft]
end
def draft=(value)
self[:draft] = value
end
def draft?
self[:draft]
end
validates_presence_of :field1, :message => "msg1", :unless => :draft?
validates_presence_of :field2, :message => "msg2", :unless => :draft?
validates_presence_of :field3, :message => "msg3", :unless => :draft?
Это работает, но как я могу сгруппировать это?
unless self.draft?
validates_presence_of :field1, :message => "msg1"
validates_presence_of :field2, :message => "msg2"
validates_presence_of :field3, :message => "msg3"
end
Говорит этот черновик? метод не найден. Также я должен сделать
@article.content.draft = @article.draft
И это тоже похоже на грязно-грязный хак