空白の電子メールを防ぐために検証したい件名とメッセージの簡単な連絡フォームがあります。
ActionMailerは検証をサポートしていません。どこに置くべきですか(つまり、別のモデルに入れるか、直接コントローラーに入れるか)?
更新:非ActiveRecordモデルで検証を実装するための最良の方法は何ですか?
空白の電子メールを防ぐために検証したい件名とメッセージの簡単な連絡フォームがあります。
ActionMailerは検証をサポートしていません。どこに置くべきですか(つまり、別のモデルに入れるか、直接コントローラーに入れるか)?
更新:非ActiveRecordモデルで検証を実装するための最良の方法は何ですか?
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 を使用できます。
たぶんこれが役に立ちます: http://activeform.rubyforge.org/