gpt4 book ai didi

ruby-on-rails-3 - ActiveRecord 验证 : association saved even if validation failed

转载 作者:行者123 更新时间:2023-12-04 06:17:38 25 4
gpt4 key购买 nike

错误被添加到记录的错误对象中,但关联仍被保存。

  class Parent < ActiveRecord::Base
validate :valid_child?

#validation methods
protected
def valid_child?
@child_names = Hash.new
self.children.each do |curr_child|
if @child_names[curr_child.name].nil?
@child_names[curr_child.name] = curr_child.name
else
errors.add(:base, "child name should be unique for children associated to the parent")
end
end
end
#associations
has_and_belongs_to_many :children, :join_table => 'map__parents__children'
end


#query on rails console

@parent = Parent.find(1)
@parent.children_ids = [1, 2]
@parent.save

最佳答案

问题在于,对于现有记录,@parent.children_ids = [1, 2]将在调用 @parent.save 之前使数据库中的更改生效.

尝试使用 validates_associated验证 child 而不是滚动您自己的验证。

要确保 child 的名字在 parent 的上下文中是唯一的,请使用 validates_uniqueness_of:scope将唯一性范围限定为父 ID 的选项。就像是:

class Child < ActiveRecord::Base
belongs_to :parent
validates_uniqueness_of :name, :scope => :parent
end

关于ruby-on-rails-3 - ActiveRecord 验证 : association saved even if validation failed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7026562/

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