Извинения, если это действительно распространенный и / или нелепый вопрос;Клянусь, я перечитывал документацию несколько раз, и все кажется настолько сосредоточенным на ActiveRecord, что они пошли по пути форм, которые делают что-то иное, чем создание или редактирование данных модели.
Взять, к примеру,Форма с входами для управления извлечением и отображением некоторой статистики.Что предоставляет мне rails для проверки ввода этой формы пользователем, который не будет вызывать save
ни для каких записей?Такие вещи, как:
:email
должен быть адресом электронной почты :num_products
должен быть положительным целым числом :gender
должен быть одним из "M""или" F " :temperature
должно быть в диапазоне от -10 до 120
и т. д. (и т. п., что входит в стандартную комплектацию большинства веб-платформ) ...
Есть ли что-то в Rails для меня, чтобы выполнить эту произвольную проверку и какой-нибудь помощник вида для отображения списка ошибок, или все это связано с ActiveRecord?
Извинения, если я упустил это из виду в документации, но это и это на самом деле не покрывает это, по крайней мере, насколько могут утомленные глаза.
царапает голову
Благодаря ответу Роба, вот что я придумала.Я создал служебный класс (метко названный 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
, когда логика более ориентирована на контроллер IMHO.Вероятно, есть более краткий способ написать это, но я довольно новичок в Ruby и Rails.