在没有模型的情况下在Rails中验证

den*_*iss 7 ruby-on-rails

我有一个允许用户向电子邮件发送消息的表单,我想为其添加验证.我没有这个模型,只有一个控制器.我应该如何在Rails中执行此操作?

我正在考虑在控制器中进行验证,并使用flash对象向用户显示错误.有没有更好的方法呢?

Chu*_*bas 6

最好的方法是在类中包装伪模型,并在那里添加验证.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
Run Code Online (Sandbox Code Playgroud)

在Rails3中,您可以使用这些性感验证 :)

  • 对于Rails 3,将ActiveRecord :: Errors替换为ActiveModel :: Errors (2认同)