Rails4でDBに保存しないModelをValidationする
永続的にDBに保存したいデータではなくとも、入力値チェックを行いたい時、form_forでフォームを生成したい時など、ActiveModelの一部の機能を使いたいことはよくあります。
Rails3ではActiveAttrというGemを使うか、もしくは割と冗長な記述が必要でした。
Rails 4ではActive::Modelをインクルードするだけですみます(ActiveAttrのGemを利用した時とほぼ同じ記述)
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 } endRails3から4へのアップグレードの際には少し苦労しますが、着実に便利になってますね。