検証が実行されないようにする「ドラフトとして保存」機能を備えた次のコードがあります(つまり、ステータスがドラフトでない場合にのみ実行する必要があります)。関連するモデルでこれを取得して、検証されないようにする方法がわかりません。
class Proposal < ActiveRecord::Base
belongs_to :user
has_one :primary_presenter, dependent: :destroy
validates :title, presence: true
validates :primary_presenter, presence: true, unless: :draft?
validates :abstract, presence: true, unless: :draft?
validates :description, presence: true, unless: :draft?
accepts_nested_attributes_for :primary_presenter
def draft?
status.draft?
end
end
class Presenter < ActiveRecord::Base
belongs_to :proposal
validates :email, presence: true, unless: :proposal_is_draft?
validates :first_name, presence: true, unless: :proposal_is_draft?
validates :last_name, presence: true, unless: :proposal_is_draft?
validates :title, presence: true, unless: :proposal_is_draft?
def proposal_is_draft?
proposal.status.draft?
end
end
class PrimaryPresenter < Presenter
end
もちろん問題は、レコードがまだ保存されていないときに presenter.proposal が nil であることです。ネストされた属性について reject_if: :all_blank を調べましたが、後で編集するときにレコードが存在するように、空白であってもレコードを作成したいので、それは私が望むことをまったくしていないようです. また、下書きとして保存する場合、部分的な提出を許可したいと考えています。何か案は?