2
レコードのエラーオブジェクトにエラーが追加されますが、関連付けは引き続き保存されます。ActiveRecord検証:検証に失敗した場合でも関連付けが保存されます
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
子の名前は、親のすべての子どもにとって一意でなければなりません。一般的に、子の名前は同じにすることができます。したがって、検証は親と子の両方に関連しています。 validates_associatedはここでは機能しません。他の代替案を提案してください –
validates_uniqueness_ofに関する情報を含む私の答えの編集版をご覧ください。 – gregspurrier