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 }
end
Rails3から4へのアップグレードの際には少し苦労しますが、着実に便利になってますね。