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