scaffoldでデータベースに登録するcontact form

2016/03/23 | Ruby on Rails

お問い合わせを使う場合にデータベースに登録したかったので、scaffoldで作成した方法です。

rails g scaffold Contact title content:text
rails g mailer ContactMailer
rake db:migrate

[code lang=”rails” title=”app/mailers/contact_mailer.rb”]
class ContactMailer < ActionMailer::Base
default from: "info@test.com"

def contact_email(user, contact)
@title = contact.title
@content = contact.content
mail to: user.email, subject: "お問い合わせがありました"
end
end
[/code]

app/views/contact_mailer/にcontact_email.html.erbとapp/views/contact_mailer/contact_email.text.erbを作成。

[code lang=”rails” title=”app/views/contact_mailer/contact_email.html.erb”]

<h1><%= @title %> のお問い合わせがありました。</h1>
Content:
<%= @content %>
[/code]

[code lang=”rails” title=”app/views/contact_mailer/contact_email.text.erb”]
<%= @title %> のお問い合わせがありました。
Content:
<%= @content %>
[/code]

app/controllers/contact_controller.rbに以下を追加。

[code lang=”rails” title=”app/controllers/contact_controller.rb”]
User = Struct.new(:name, :email)

# POST /contacts
# POST /contacts.json
def create
@contact = Contact.new(contact_params)

respond_to do |format|
if @contact.save
user = User.new("Contact from", "test@test.com")
ContactMailer.contact_email(user, @contact).deliver

format.html { redirect_to @contact, notice: ‘Contact has successfully sent.’ }
format.json { render :show, status: :created, location: @contact }
else
format.html { render :new }
format.json { render json: @contact.errors, status: :unprocessable_entity }
end
end
[/code]

これでデータベースに登録されるお問い合わせが出来ました。ただ、このままだとお問い合わせのあった内容がurl/contactsに全て表示されますので、その処理をします。

まず、contacts一覧は必要ないのでindexから投稿するようにします。showも必要ないのでindexにredirectさせます。

[code lang=”rails” title=”app/controllers/contact_controller.rb”]
# GET /contacts
# GET /contacts.json
def index
@contact = Contact.new
end

# GET /contacts/1
# GET /contacts/1.json
def show
redirect_to contacts_url
end
[/code]

[code lang=”rails” title=”app/views/contacts/index.html.erb”]

<div class="container about-section">

<div class="row">

<div class="col-sm-8 col-sm-offset-2">
<%= render ‘layouts/messages’ %>

<h1>Contact</h1>

<%= simple_form_for(@contact) do |f| %>

<div class="form-inputs">
<%= f.input :title, label: "title" %>
<%= f.input :content, input_html: { style: ‘height:100px;’ }
</div>

<div class="form-actions">
<%= f.button :submit, :value => ‘Submit’, :class => ‘btn-primary btn-lg btn-block’ %>
</div>

</div>

</div>

</div>

[/code]

bootstrapとsimple_formを使っているのでこの記述になっています。自分の環境に合わせて変更してください。登録された内容については、rails_adminを使用しているので、admin画面で確認しています。rails_adminについてはこちらをご覧ください。
以上データベースに登録するお問い合わせの作成方法でした。

連記事

bundle exec cap production puma:nginx_config

2024/03/26 | Ruby on Rails

cd /etc/nginx sudo mkdir sites-available これをしてから % bundle exec cap production puma:nginx_config...

Amazon Linux 2023にmysqlをインストール

2024/03/26 | Ruby on Rails

Amazon Linux 2023でmysqlのインストール方法 $ sudo yum localinstall -y https://dev.mysql.com/get/mysql80-commu...

simple_formのcollectionのselectを任意の値で並べる方法

2020/02/21 | Ruby on Rails

Railsのsimple_formでorder作成時にproduct_nameとproduct_codeを持つproductをproduct_codeで並べ替える方法です。 ちょっとハマったので...

enumで特定の値を除外する場合

2018/12/20 | Ruby on Rails

enumで選択肢が2つある場合 # models/blog.rb class Blog < ApplicationRecord   enum status: { published...

pdf出力

2017/06/30 | Ruby on Rails

railsでpdfに出力 #gemfile gem 'wkhtmltopdf-binary' gem 'wicked_pdf' #config/initializers/wicked_...