所以我有一个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
。但这似乎不起作用。
答案 0 :(得分:10)
您可以创建一个方法,而不是将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?}