Rails 3で以下のフィールドを使用してお問い合わせフォームを作成します:
投稿されたメッセージは私のメールアドレスに送信されることを意図しているため、メッセージをデータベースに保存する必要はありません。 ActionMailer
、それ用のgemまたはプラグインを使用する必要がありますか?
これ チュートリアルは優れた例です-そしてそれはRails 3
更新:
この記事 は、以前に投稿したものよりも優れた例で、問題なく動作します
2回目の更新:
this railscastactive_attr gemで概説されているいくつかのテクニックをマージすることもお勧めします。ここで、Ryan Batesは、テーブルモデルをお問い合わせページ。
3回目の更新:
私は自分で書きました テスト駆動のブログ投稿 それについて書きました
REST仕様にできるだけ近くなるように実装を更新しました。
mail_form gem を使用できます。インストール後、ドキュメントで説明されているように、Message
という名前のモデルを作成します。
# app/models/message.rb
class Message < MailForm::Base
attribute :name, :validate => true
attribute :email, :validate => /\A([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})\z/i
attribute :message_title, :validate => true
attribute :message_body, :validate => true
def headers
{
:subject => "A message",
:to => "[email protected]",
:from => %("#{name}" <#{email}>)
}
end
end
これにより、すでにテストを行うことができます コンソールからメールを送信する 。
別の連絡先ページを作成するには、次の手順を実行します。
# app/controllers/messages_controller.rb
class MessagesController < ApplicationController
respond_to :html
def index
end
def create
message = Message.new(params[:contact_form])
if message.deliver
redirect_to root_path, :notice => 'Email has been sent.'
else
redirect_to root_path, :notice => 'Email could not be sent.'
end
end
end
ルーティングを設定します。
# config/routes.rb
MyApp::Application.routes.draw do
# Other resources
resources :messages, only: [:index, :create]
match "contact" => "messages#index"
end
フォームの部分を準備します。
// app/views/pages/_form.html.haml
= simple_form_for :contact_form, url: messages_path, method: :post do |f|
= f.error_notification
.form-inputs
= f.input :name
= f.input :email, label: 'Email address'
= f.input :message_title, label: 'Title'
= f.input :message_body, label: 'Your message', as: :text
.form-actions
= f.submit 'Submit'
フォームをビューにレンダリングします。
// app/views/messages/index.html.haml
#contactform.row
= render 'form'
この例のコードを機能させることができなかったので、モデルを作成してから少し複雑になっていると思います。
Anywat、私は実用的な連絡フォームを作成し、それについてブログに書いた..テキストはポルトガル語ですが、コード自体は(ほとんど)英語です http://www.rodrigoalvesvieira.com/formulario-contato-Rails/
注:SMTPではなくsendmailを使用しました。