Validation in Rails without a model

后端 未结 2 943
一整个雨季
一整个雨季 2020-12-07 02:08

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

2条回答
  •  执念已碎
    2020-12-07 02:13

    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 :)

提交回复
热议问题