名前、電話番号、電子メール、メッセージを入力できる連絡先ページがあり、その後、管理者の電子メールに送信されます。メッセージをDBに保存する理由はありません。
質問。方法:
Rails検証をコントローラーで使用し、モデルをまったく使用しない、または
モデルで検証を使用しますが、DB関係はありません
PD:
モデル:
class ContactPageMessage
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
attr_accessor :name, :telephone, :email, :message
validates :name, :telephone, :email, :message, presence: true
validates :email, email_format: { :message => "Неверный формат E-mail адреса"}
def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end
def persisted?
false
end
end
コントローラ:
def sendmessage
cpm = ContactPageMessage.new()
if cpm.valid?
@settings = Setting.first
if !@settings
redirect_to contacts_path, :alert => "Fail"
end
if ContactPageMessage.received(params).deliver
redirect_to contacts_path, :notice => "Success"
else
redirect_to contacts_path, :alert => "Fail"
end
else
redirect_to contacts_path, :alert => "Fail"
end
end
end
ActiveRecord::Base
クラスから継承せずにモデルを使用する必要があります。
class ContactPageMessage
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
attr_accessor :whatever
validates :whatever, :presence => true
def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end
def persisted?
false
end
end
これにより、新しいオブジェクトを初期化し、そのオブジェクトの検証を呼び出すことができます。
私はあなたが同じ名前の別のクラス名を持っていると思います、あなたのコントローラーコードで、私はこれを見ることができます:
if ContactPageMessage.received(params).deliver
redirect_to contacts_path, :notice => "Success"
else
これがメーラークラスの場合は、名前をContactPageMessageMailer
に変更します。ロガーがそのエラーを受け取ることはありません。
それが役立つことを願っています。ありがとう
モデルを使用することをお勧めします。RailsモデルはActiveRecord::Base
から継承する必要はありません。例:
class Contact
include ActiveModel::Validations
attr_accessor :name, :telephone, :email, :message
validates_presence_of :name, :telephone, :email, :message
validates_format_of :email, with: EMAIL_REGEXP
end
そして、あなたはそれをあなたのコントローラーで使うことができます:
contact = Contact.new
# ...
if contact.valid?
# do something
else
# do something else
end