validateをDBにTableがないときに使いたければ、ActiveFormを使う。

スポンサーリンク

gem install rails3-active_form
Gemfileにも
gem “rails3-active_form”, “~> 2.0.0”

modelフォルダ下に新しくmodelファイルの作成
request.rbとかそんな感じ。

request.rbの中身

require “active_form”

class Request < ActiveForm
attr_accessor :name, :mladdr, :phone, :subject, :body
end

本来テーブルから取得するはずの変数をattr_accessorで定義してあげれば、
controllerでModel名でnewしてあげれば、form_forメソッドが使えました。

日本語化のために・・・。

ActiveFormの子クラスに下記を追加

#バリデーションエラーメッセージ内のプロパティ名を日本語にマッピングします。
class << self
HUMANIZED_ATTRIBUTE_KEY_NAMES = {
“name” => “お名前”,
:name => “お名前”
}

def human_attribute_name(attribute_key_name, options = {})
HUMANIZED_ATTRIBUTE_KEY_NAMES[attribute_key_name] || super
end
end

ネット上のソースだと、human_attribute_nameがrails3.*よりエラーになるからoption={}が必要だったり、
“name”と:nameの両方を反映させなきゃいけなかったりと超手間取ったけどなんとか解決。
:nameがエラーメッセージ側、”name”がラベル側に反映する。

コメント

タイトルとURLをコピーしました