Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Validation in Rails without a model

I have a form that allows the user to send a message to an email, and I want to add validation to it. I do not have a model for this, only a controller. How should I do this in Rails?

I was considering doing the validation in the controller, and displaying the errors to the user using the flash object. Is there a better way of doing this?

like image 733
denniss Avatar asked Aug 25 '10 05:08

denniss


1 Answers

The best approach would be to wrap up your pseudo-model in a class, and add the validations there. The Rails way states you shouldn't put model behavior on the controllers, the only validations there should be the ones that go with the request itself (authentication, authorization, etc.)

In Rails 2.3+, you can include ActiveRecord::Validations, with the little drawback that you have to define some methods the ActiveRecord layer expects. See this post for a deeper explanation. Code below adapted from that post:

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

In Rails3, you have those sexy validations at your disposal :)

like image 113
Chubas Avatar answered Sep 24 '22 03:09

Chubas