Rails 3: Отображение ошибок проверки для формы (без сохранения модели ActiveRecord)

Извините, если это действительно распространенный и / или смешной вопрос; Клянусь, я Я прочитал документацию несколько раз, и все кажется настолько сосредоточенным на 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.

5
задан JW8 31 August 2011 в 20:41
поделиться