0

空白の電子メールを防ぐために検証したい件名とメッセージの簡単な連絡フォームがあります。

ActionMailerは検証をサポートしていません。どこに置くべきですか(つまり、別のモデルに入れるか、直接コントローラーに入れるか)?

更新:非ActiveRecordモデルで検証を実装するための最良の方法は何ですか?

4

3 に答える 3

1

Rails 3 では、検証を ActiveRecord から ActiveModel に分離しました。したがって、Rails を使用している場合、またはバンドラーを使用してプロジェクトに少なくとも ActiveModel gem がある場合、または優先する方法が何であれ、任意のクラスに 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

この例は、 ContactUsを作成したお問い合わせフォーム Rails 3+ エンジンからのものです。実装で他の問題が発生した場合は、Github でコードを参照できます。また、アプリケーションにあまりこだわりがない場合は、Gem を使用できます。

于 2011-07-18T01:42:55.213 に答える
1

これは役に立ちますか?http://forums.site5.com/showthread.php?t=18522

于 2009-07-09T13:47:16.610 に答える
0

たぶんこれが役に立ちます: http://activeform.rubyforge.org/

于 2009-07-09T13:48:16.720 に答える