31

Rails 3で、次のフィールドを使用してお問い合わせフォームを作成したいと思います。

  • 名前
  • Eメール
  • メッセージタイトル
  • メッセージ本文

投稿されたメッセージは私のメールアドレスに送信されることを目的としているため、必ずしもデータベースにメッセージを保存する必要はありません。ActionMailer、宝石やプラグインを使用する必要がありますか?

4

4 に答える 4

66

このチュートリアルは優れた例です-そしてそれはRails3です

アップデート:

この記事は私が以前に投稿したものよりも良い例であり、完璧に機能します

2番目の更新:

また、active_attr gemのこのrailscastで概説されているテクニックのいくつかをマージすることをお勧めします。ここでは、RyanBatesが連絡先ページのテーブルモデルを設定するプロセスを順を追って説明します。

3番目の更新:

私はそれについて私自身のテスト駆動のブログ投稿を書きました

于 2010-09-11T14:20:24.553 に答える
9

実装をREST仕様にできるだけ近くなるように更新しました。

基本設定

mail_formgemを使用できます。インストール後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 => "contact@domain.com",
      :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'
于 2013-04-26T13:19:51.930 に答える
1

この例のコードを機能させることができませんでした。モデルを作成してから、少し複雑になると思います。

とにかく、私は実用的な連絡フォームを作成し、それについてブログに書きました。テキストはポルトガル語ですが、コード自体は(ほとんど)英語ですhttp://www.rodrigoalvesvieira.com/formulario-contato-rails/

注:SMTPではなくsendmailを使用しました。

于 2011-07-25T19:43:18.120 に答える
-1

次のリンクからContactUsgemを使用できます:https ://github.com/JDutil/contact_us ドキュメントは明確で、簡単に使用できます。

特徴:

  1. 検証
  2. 簡単/追加削除フィールド
  3. シンプルな構成
于 2016-03-09T19:04:56.553 に答える