次のモデルがあるとします。
user.rb
has_many :favorites, dependent: :destroy
has_many :sports, through: :favorites
スポーツ.rb
has_many :favorites, dependent: :destroy
has_many :users, through: :favorites
新しいユーザーを作成するためのフォームには、スポーツのチェックボックスのリストがあり、ユーザーの検証では、少なくとも 1 つが選択されていることを検証したいと考えています。
私はこのようにやっています:
ユーザーコントローラーの作成アクションで:
@user = User.new(params[:user])
@user.sports << Sport.find(params[:sports]) unless params[:sports].nil?
if @user.save ...
ユーザーモデルでは
validate :user_must_select_sport
def user_must_select_sport
if sports.empty?
errors.add(:Sport, "You have to select at least 1 sport")
end
end
実際には機能していますが、これを行うにはもっと良い方法である必要があると思います。助けていただければ幸いです。