関連付けを 2 つ (スコープごとに 1 つ) に制限したいと考えています。私は試した:
has_many :associations
has_many :associations_with_first_scope, :class_name => 'Association', :conditions => {...}
has_many :associations_with_second_scope, :class_name => 'Association', :conditions => {...}
validates :associations, {:maximum => 4}
validates :associations_with_first_scope, {:maximum => 2}
validates :associations_with_second_scope, {:maximum => 2}
また、カスタムバリデータも試しました(カウント、サイズ、長さも試しました):
validate :custom_associations_limit
def custom_associations_limit
error.add(:base, '...') if associations_with_first_scope.size > 2
error.add(:base, '...') if associations_with_second_scope.size > 2
end
また、アソシエーション モデルに検証を入れようとしました。何も機能しません。私の問題は、nested_form gem を使用したことが原因だと思います。4 つの関連付け (各種類ごとに 2 つ) を持つフォームがあり、トウを削除してトウを追加すると、モデルは 4 つではなく 6 つのアソシエーションがあると認識します。おそらく、nested_attributes が渡される前に (allow_destroy を true に設定して) 検証しているためです。
これを手伝ってくれる人はいますか?