開発ブログ

株式会社Nextatのスタッフがお送りする技術コラムメインのブログ。

電話でのお問合わせ 075-744-6842 ([月]-[金] 10:00〜17:00)

  1. top >
  2. 開発ブログ >
  3. Ruby >
  4. Ruby on Rails >
  5. Rails4でDBに保存しないModelをValidationする
no-image

Rails4でDBに保存しないModelをValidationする

永続的にDBに保存したいデータではなくとも、入力値チェックを行いたい時、form_forでフォームを生成したい時など、ActiveModelの一部の機能を使いたいことはよくあります。

Rails3ではActiveAttrというGemを使うか、もしくは割と冗長な記述が必要でした。
class Contact
  include ActiveModel::Conversion
  include ActiveModel::Validations
  extend ActiveModel::Naming
  extend ActiveModel::Translation

  attr_accessor :name, :email, :message

  validates :name, presence: true
  validates :email, presence: true
  validates :message, presence: true, length: { maximum: 255 }

  def persisted?
    false
  end

  def initialize(attributes = {})
    self.attributes = attributes
  end
 
  def attributes=(attributes = {})
    if attributes
      attributes.each do |name, value|
        send "#{name}=", value
      end
    end
  end
end

Rails 4ではActive::Modelをインクルードするだけですみます(ActiveAttrのGemを利用した時とほぼ同じ記述)
class Contact
  include ActiveModel::Model

  attr_accessor :name, :email, :message

  validates :name, presence: true
  validates :email, presence: true
  validates :message, presence: true, length: { maximum: 255 }
end
Rails3から4へのアップグレードの際には少し苦労しますが、着実に便利になってますね。
TOPに戻る