gpt4 book ai didi

ruby-on-rails - Rails : use REJECT_IF only on CREATE action for nested attributes

转载 作者:行者123 更新时间:2023-12-04 17:09:16 26 4
gpt4 key购买 nike

因此,我有一个Profile对象的许多多态子对象。如果特定对象的字段为空,则这些模型旨在销毁after_save。

但是对于accept_nested_attributes,如果它为空,我不想首先创建子对象。但是,如果我留下reject_if语句,那么用户将不再具有在UPDATE上清空该字段的能力,因为reject_if拒绝了他们的空白输入。

accepts_nested_attributes_for :socials, reject_if: proc { |att| att['username'].blank? }
accepts_nested_attributes_for :phones, reject_if: proc {|att| att['number'].blank? }
accepts_nested_attributes_for :websites, reject_if: proc {|att| att['url'].blank? }

所以我想 reject_if: { ... }, on: :create。但这似乎不起作用。

最佳答案

您可以创建一个方法,而不是将proc发送到reject_if选项中,该方法是相同的,只是更具可读性,因此代码如下所示:

accepts_nested_attributes_for :socials, reject_if: :social_rejectable?

private

def social_rejectable?(att)
att['username'].blank? && new_record?
end

您可以重复这些方法,然后通过一些元编程对其进行清理,或者在 new_record?上添加 proc方法
accepts_nested_attributes_for :socials, reject_if: proc { |att| att['username'].blank? && new_record?}

关于ruby-on-rails - Rails : use REJECT_IF only on CREATE action for nested attributes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27660424/

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