2

関連付けを 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 に設定して) 検証しているためです。

これを手伝ってくれる人はいますか?

4

1 に答える 1

0

Railsにはすでにhas_oneマクロが組み込まれています。

has_many :associations
has_one :associations_with_first_scope, :class_name => 'Association', :conditions => {...}
has_one :associations_with_second_scope, :class_name => 'Association', :conditions => {...}

唯一の違いは、複数の関連付けは1つしかないため、複数の関連付けを使用しないことです。

于 2012-08-15T12:12:15.577 に答える