我有一个'notes'对象嵌套在多个其他对象中,例如'user'。我想只在有人填写了note_text字段中的内容时添加/保存新笔记。我以为我找到了一种方法,但由于错误,它也会停止保存对象的其余部分。
class User < ActiveRecord::Base
has_many :notes
accepts_nested_attributes_for :notes
end
class Note < ActiveRecord::Base
belongs_to :user
before_save :check_for_blank_note
def check_for_blank_note
if self.note_text.nil? || self.note_text.blank?
false
else
true
end
end
end
我希望停止对笔记的保存并让用户进行更新和保存。
答案 0 :(得分:3)
使用:reject_if
以静默方式删除任何未通过逻辑的记录:
class User < ActiveRecord::Base
has_many :notes
accepts_nested_attributes_for :notes, reject_if: proc { |attributes| attributes['note_text'].blank? }
end
答案 1 :(得分:1)
您始终可以添加一项验证,以阻止保存空白笔记:
class Note < ActiveRecord::Base
validates :note_text, presence: true
end
如果您使用save!
,这将触发保存例外,因此您可能希望屏蔽掉任何无效的注释:
before_save :remove_empty_notes
def remove_empty_notes
self.notes.reject! { |note| !note.valid? }
end