0

私は次のモデルを持っています

class Business < ActiveRecord::Base
    has_and_belongs_to_many :categories

    validates_presence_of :category_ids
end

class Category < ActiveRecord::Base
    has_and_belongs_to_many :businesses
end

category_ids属性を使用して、ビジネス作成フォームを介して関係を設定しています。

使ってみvalidates_presence_ofましたが、カテゴリの存在を確認できません。

ブラウザからフォームを操作し、カテゴリに存在しないIDを指定できます。フォームを送信した後、エラーが発生します。

Couldn't find Category with id=181723

編集:

次のカスタム検証方法を追加しましたが、検証が実行されていないかのように、同じエラーが発生します。

class Business < ActiveRecord::Base
    has_and_belongs_to_many :categories

    validate :categories_exist

    def categories_exist
      category_ids.each do |c|
        errors.add(:category_ids, :category_doesnt_exist) unless Category.exists? c
      end
    end
end
4

2 に答える 2

1

これを実現するにはおそらくさまざまな方法がありますが、カスタム検証ActiveRecordコールバックを確認することをお勧めします。

于 2012-12-19T17:09:58.010 に答える
0

あなたはvalidates_existencegemをチェックアウトすることができます。このgemは、外部キーが正当な親レコードに対応しているかどうかを検証するのに非常に役立ちました。readmeで説明されているように:

このプラグインライブラリは、保存時に:belongs_toアソシエーションが実際に存在するかどうかを確認する方法をActiveRecordモデルに追加します。

于 2012-12-19T16:57:31.057 に答える