これが本当に一般的でばかげた質問である場合はお詫びします。ドキュメントを何度も読んだことを誓いますが、すべてが ActiveRecord に集中しているように見え、モデルデータの作成または編集以外のことを行うフォームの道から迷い込んでしまいました。
いくつかの統計の抽出と表示を制御するための入力を含むフォームを例にとります。このフォームのユーザー入力を検証するために、Rails は何を提供してくれますsave
か? 次のようなもの:
:email
メールアドレスである必要があります:num_products
正の整数でなければなりません:gender
「M」または「F」のいずれかでなければなりません:temperature
-10 から 120 の間でなければなりません
などなど (ほとんどの Web フレームワークに標準装備されているもの)...
この任意の検証を実行するための Rails と、エラーのリストを表示するためのビュー ヘルパーがありますか、それともすべてが ActiveRecord と結合されていますか?
ドキュメントでこれを見落としていたら申し訳ありませんが、少なくとも mt 疲れた目がわかる限り、これとこれは実際にはカバーしていません。
頭を掻く
ロブの答えのおかげで、これが私が思いついたものです。ユーティリティ クラス (適切な名前のValidator
) を作成しました。このクラスは、必要なすべてのもののためにコントローラーに埋め込まれています。
module MyApp
class Validator
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
def initialize(attributes = {})
super
attributes.each { |n, v| send("#{n}=", v) if respond_to?("#{n}=") }
end
end
end
たとえば、コントローラーで、小さなインラインクラスを定義するだけです。
class LoginController < ApplicationController
class AuthenticationValidator < MyApp::Validator
attr_accessor :email
attr_accessor :password
validates_presence_of :email, :message => "E-mail is a required field"
validates_presence_of :password, :message => "Password cannot be blank"
end
def authenticate
if request.post?
@validator = AuthenticationValidator.new(params)
if @validator.valid?
# Do something meaningful
end
end
end
.rb
ロジックがよりコントローラー指向の私見である場合、検証ルールのすべてのセットを独自に固執することは少し不必要に感じます。これをもっと簡潔に書く方法があるかもしれませんが、私は Ruby と Rails にかなり慣れていません。