Rails 4アプリでメールを送信するようにMailFormを設定しようとしていますが、実際には1つのことを除いて機能しています。
message
何らかの理由で、メールにフィールドが含まれていません(フォームにはname
,フィールドと非表示フィールドしかemail
ありません)。message
nickname
私のContact
モデルは次のようになります。
class Contact < MailForm::Base
attribute :name, validate: true
attribute :email, validate: /\A([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})\z/i
attribute :message
attribute :nickname, captcha: true
append :remote_ip, :user_agent
def headers
{
subject: 'Question',
to: ENV['ACTION_MAILER_USERNAME'],
from: %("#{name}" <#{email}>)
}
end
end
に追加validate: true
するattribute :message
と、検証が正しく機能しません。つまり、フィールドが空でない場合でも空であると表示されるため、:message
属性の検証をオンにすると、フォームを送信することさえできません。
MailForm ドキュメントの例では、:message
フィールドの検証はありませんが、フォームを送信すると、送信されたメッセージには:name
と:email
フィールドのみが含まれ、 no :message
.
私ContactsController.rb
はこのように見えます:
class ContactsController < ApplicationController
def new
@contact = Contact.new
end
def create
@contact = Contact.new(contact_params)
@contact.request = request
if @contact.deliver
flash.now[:notice] = I18n.t('contact.message_success')
redirect_to root_path
else
flash.now[:error] = I18n.t('contact.message_error')
render :new
end
end
private
def contact_params
params.require(:contact).permit(:name, :email, :message)
end
end
そして、ここに私のhtmlフォームがあります:
<%= simple_form_for @contact do |f| %>
<%= f.input :name, required: true, label: false %>
<%= f.input :email, required: true, label: false %>
<%= f.input :message, as: :text, required: true, label: false %>
<div class="hidden">
<%= f.input :nickname, hint: 'Leave this field blank!' %>
</div>
<%= f.button :submit, t('contact.action') %>
<% end %>
したがって、基本的に、MailForm ドキュメントの例に従いましたが、それでも正しく動作しませんでした。
私が間違っていることを見つけるのを手伝ってもらえますか?
更新 1
問題はパラメータにあるようです。params
フォームを送信すると、ハッシュは次のようになります。
Parameters: {"utf8"=>"✓", "authenticity_token"=>"kOtHaOTBNvl5KpPBLB31LtQ6W0jUoohg012ZbQ5qyg0fAGW6y5mMR5FSAEcY4kyotFYihTvRSvTtbDsc8oMQ3g==", "contact"=>{"name"=>"Testing", "email"=>"whatever@test.com", "nickname"=>""}, "Message"=>"Hello everyone!", "commit"=>"Send", "locale"=>"en"}