Shred IT!!!!

IT全般について試したこと・勉強したことを綴ったり、趣味について語るブログ

Rails Model で has_many 定義した要素数を validate する方法

実装例

class Kuso < ActiveRecord::Base
  has_many :unchis
  validate: buriburi_unchis

  def buriburi_unchis
    errors.add(:unchis, "oops!") if unchis.size > 1
  end
end

ポイントは unchis.size
以前記事にした
Railsで階層化された複数モデルに対応するフォームの作り方 - Shred IT!!!!
のようにフォームからのパラメーターを利用したい場合は size メソッドを使うこと。

count メソッドにしてしまうと、DB に接続してレコード数をカウントしてしまう。
逆に DB のレコード数が欲しければ count でいい。

まとめ

  • フォームから受け取った要素を数える場合は hoge.size
  • DB のレコードを数える場合は hoge.count