У меня есть форма, которая позволяет пользователю отправлять сообщение на электронную почту, и я хочу добавить к нему подтверждение. У меня нет модели для этого, только контроллер. Как мне сделать это в Rails?
Я подумывал о том, чтобы выполнить проверку в контроллере и отобразить ошибки пользователю, используя объект flash . Есть ли лучший способ сделать это?
Лучшим подходом было бы заключить вашу псевдомодель в класс и добавить там проверки. Способ Rails гласит, что вы не должны помещать модели поведения в контроллеры, единственными валидациями должны быть те, которые связаны с самим запросом (аутентификация, авторизация и т. Д.)
В Rails 2.3+ вы можете включить ActiveRecord :: Validations
, с небольшим недостатком, заключающимся в том, что вам нужно определить некоторые методы, ожидаемые слоем ActiveRecord.См. этот пост для более подробного объяснения. Приведенный ниже код адаптирован из этого сообщения:
require 'active_record/validations'
class Email
attr_accessor :name, :email
attr_accessor :errors
def initialize(*args)
# Create an Errors object, which is required by validations and to use some view methods.
@errors = ActiveRecord::Errors.new(self)
end
# Required method stubs
def save
end
def save!
end
def new_record?
false
end
def update_attribute
end
# Mix in that validation goodness!
include ActiveRecord::Validations
# Validations! =)
validates_presence_of :name
validates_format_of :email, :with => SOME_EMAIL_REGEXP
end
В Rails3 в вашем распоряжении сексуальные проверки :)