2009-07-09 248 views
0

我有一個簡單的聯繫表格,包含主題和消息,我想驗證以防止空白電子郵件。驗證聯繫表格

ActionMailer不支持驗證。我應該把它放在哪裏(即在一個分離的模型中或直接在控制器中)?

更新:在非ActiveRecord模型中實現驗證的最佳方式是什麼?

回答

1

在Rails 3他們去耦驗證ActiveRecord的加載ActiveModel成。因此,如果您使用Rails或至少在您的項目中使用捆綁器或任何您喜歡的方法獲得ActiveModel gem,則可以在任何類中包含ActiveModel :: Validations。下面是一個例子類(加載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。