はじめに
errors.add……
の書き方をよく忘れてしまうので備忘録。
条件
ProjectモデルとGenreモデルがhas_and_belongs_to_many
で中間テーブルを通してアソシエーションされている。
projectをcreateするとき、該当のprojectのGenreも登録している。
erros.addをvalidateに記述する
project.rb
class Project < ApplicationRecord
has_and_belongs_to_many :genres
validates :name, presence: true, length: { maximum: 200 }
・
・
・
validate :has_genres?
def has_genres?
errors.add(:genres, "を選んでください") if self.genres.blank?
end
end
きちんとi18nとエラーを表示をする設定をviewに追記すれば、
Genreを登録しなかったときにErrorMessageが表示されます。
new.html.erb
<% @project.errors.full_messages.each do |msg| %>
<div class="alert alert-danger">
<%= msg %>
</div>
<% end %>