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についてはこちらをご覧ください。
以上データベースに登録するお問い合わせの作成方法でした。