地方でリモートワーク in Iwate

東京の受託開発会社でリモートワークしてます。

Railsで部分テンプレートを使いながらcreate,newとupdate,editでsubmitボタンの表示を簡単に切り替える方法

スポンサーリンク

Railsでnewとeditページでsubmitボタンの表示を切り替える方法です。

scaffoldでCRUDを作成するとわかるのですが、すでにこの機能がRailsには内蔵されています。

editとupdateでsubmitボタンの表示が切り替わってますね。 f:id:ihatov08:20160713181056p:plainf:id:ihatov08:20160713181101p:plain

scaffoldで作成した際に、部分テンプレートを使っているのですが、railsがcreateなのかupdateなのか判断して、表示の切り替えを行ってくれています。

_form.html.erb

<%= form_for(@event) do |f| %>
  <% if @event.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@event.errors.count, "error") %> prohibited this event from being saved:</h2>

      <ul>
      <% @event.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :title %><br>
    <%= f.text_field :title %>
  </div>
  <div class="field">
    <%= f.label :description %><br>
    <%= f.text_area :description %>
  </div>
  <div class="field">
    <%= f.label :start_time %><br>
    <%= f.datetime_select :start_time %>
  </div>
  <div class="field">
    <%= f.label :end_time %><br>
    <%= f.datetime_select :end_time %>
  </div>
  <div class="actions">
    <%= f.submit %> #createもupdateも同じsubmitヘルバーを使っている。
  </div>
<% end %>

これを日本語表示に切り替えたい場合、viewに<%= f.submit '作成' %>と記述してしまうとcreateとupdateで同じviewを使っているため更新ボタンの実装ができません。 三項演算子を使って表示を切り替える方法もありますが、あまりスマートではありませんね。

<p><%= f.submit @user.new_record? ? "Create my account" : "Update my account" %></p>

I18nに対応しつつ、createとupdateで表示を切り替えるにはymlファイルで定義するとRailsがうまいことやってくれます。

ja:
  activerecord:
    models:
      event: イベント
      user: ユーザー
    attributes:
      events: イベント
      users: ユーザー
  helpers:
    submit:
      create: "%{model}作成"
      update: "%{model}更新"

Railsがどのmodelに基づくviewなのか判断して、表示を切り替えてくれます。%{model}で変数的にymlで値を渡してあげるのがミソです。

events/new
f:id:ihatov08:20160713182147p:plain

events/:id/edit
f:id:ihatov08:20160713182156p:plain

users/new
f:id:ihatov08:20160713182200p:plain

users/:id/edit
f:id:ihatov08:20160713182204p:plain

Railsを学ぶなら以下の本がおすすめです。

パーフェクト Ruby on Rails

パーフェクト Ruby on Rails

改訂3版 基礎 Ruby on Rails 基礎シリーズ

改訂3版 基礎 Ruby on Rails 基礎シリーズ

実践Ruby on Rails 4 現場のプロから学ぶ本格Webプログラミング

実践Ruby on Rails 4 現場のプロから学ぶ本格Webプログラミング