gpt4 book ai didi

ruby-on-rails - 关联模型的 Rails ActiveRecord 条件验证?

转载 作者:太空宇宙 更新时间:2023-11-03 16:29:37 24 4
gpt4 key购买 nike

我有以下带有“另存为草稿”功能的代码,该功能会阻止验证运行(即它们应该只在状态不是草稿时运行)。我不确定如何在我的关联模型中接受这一点,以防止它们被验证:

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 的嵌套属性,但这似乎并没有完全满足我的要求,因为我仍然希望创建记录,即使它是空白的,以便稍后编辑时记录将存在.如果保存为草稿,我也想允许部分提交。有什么想法吗?

最佳答案

不确定这是否足够,但一种可能性是接受当提案为零时,proposal_is_draft?实际上是真的。在这种情况下,您可以将其重新定义为:

def proposal_is_draft?
!proposal.persisted? || proposal.draft?
end

虽然这看起来不太好,但它会在提案未持久化时返回 true,并在提案是草稿时返回 true(从 status.draft 更改为使用您在 Proposal 类中定义的方法)。

关于ruby-on-rails - 关联模型的 Rails ActiveRecord 条件验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18262383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com