【问题标题】:Validate Contact Form验证联系表
【发布时间】:2009-07-09 13:40:12
【问题描述】:

我有一个包含主题和消息的简单联系表,我想验证它以防止出现空白电子邮件。

ActionMailer 不支持验证。我应该把它放在哪里(即在单独的模型中或直接在控制器中)?

更新:在非 ActiveRecord 模型中实现验证的最佳方法是什么?

【问题讨论】:

    标签: ruby-on-rails validation forms contacts


    【解决方案1】:

    【讨论】:

    • 我认为在这种情况下扩展 ActiveRecord::Base 不是一个好习惯。
    • 嗯...好吧,如果这是您将要这样做的唯一地方并且您不想使用单独的模型,那么如果您只是在控制器。这可能不是最佳实践,但由于它无论如何都是一件小事,所以将验证代码放在哪里并不重要。或者,您可以查看客户端验证。
    【解决方案2】:

    在 Rails 3 中,他们将验证从 ActiveRecord 分离到 ActiveModel。因此,如果您使用 Rails 或在您的项目中至少有 ActiveModel gem 和 bundler 或任何您喜欢的方法,您可以在任何类中包含 ActiveModel::Validations。这是一个示例类(请注意,Bundler 需要我的 ActiveModel):

    class ContactUs::Contact
      include ActiveModel::Validations
    
      attr_accessor :email, :message
    
      validates :email,   :format => { :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i },
                          :presence => true
      validates :message, :presence => true
    
      def initialize(attributes = {})
        attributes.each do |key, value|
          self.send("#{key}=", value)
        end
        @attributes = attributes
      end
    
      def read_attribute_for_validation(key)
        @attributes[key]
      end
    
      def save
        if self.valid?
          ContactUs::ContactMailer.contact_email(self).deliver
          return true
        end
        return false
      end
    end
    

    该示例来自我编写的联系表单 Rails 3+ 引擎ContactUs,如果您在实现中遇到任何其他问题,可以在 Github 上浏览代码,如果您的应用程序不太自以为是,请使用 Gem。

    【讨论】:

      【解决方案3】:

      也许这对你有帮助:http://activeform.rubyforge.org/

      【讨论】:

        猜你喜欢
        • 2013-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多