忍者ブログ

ぢみへんプログラミング日誌

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

ActiveRecordのヴァリデーションを自動化する

ActiveRecord(以下ARと略)にはデータの整合性をチェックするためのヴァリデーションメソッドが用意されているんだが、たくさんのARを扱うWEBアプリを作ろうとすると、個々のARにいちいちテーブルのカラム制約に合せたヴァリデーションを記述するのが面倒くさくなってくる。
そもそもARは対応するテーブルのメタ情報は全て持っているので、それを利用してヴァリデーションを自動記述してしまった方がはっきり言って楽だろう。

――ということで作ってみました。
module AutoValidates
def self.included(klass)
klass.class_eval{
klass.columns.each do |column|
next if ["id"].include?(column.name)
if [:integer].include?(column.type) && !column.array
# 数値型確認
validates column.name.to_sym,
numericality: {unless: Proc.new{|k| eval("k.#{column.name}").nil?},
only_integer: true
elsif column.null == false
# NOT NULL
validates column.name.to_sym,
presence: {if: Proc.new{|k| eval("k.#{column.name}").nil?}
end
end
}
end
end



これをAR側でincludeすればOK.(のはず)

PR

COMMENT

NAME
TITLE
MAIL (非公開)
URL
EMOJI
Vodafone絵文字 i-mode絵文字 Ezweb絵文字
COMMENT
PASS (コメント編集に必須です)
SECRET
管理人のみ閲覧できます
 
  

カレンダー

04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

フリーエリア

最新CM

バーコード

ブログ内検索

Copyright ©  -- ぢみへんプログラミング日誌 --  All Rights Reserved

Design by CriCri / Material by petit sozai emi / powered by NINJA TOOLS / 忍者ブログ / [PR]