Railsでnewとeditページでsubmitボタンの表示を切り替える方法です。
scaffoldでCRUDを作成するとわかるのですが、すでにこの機能がRailsには内蔵されています。
editとupdateでsubmitボタンの表示が切り替わってますね。
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
events/:id/edit
users/new
users/:id/edit
Railsを学ぶなら以下の本がおすすめです。

- 作者: すがわらまさのり,前島真一,近藤宇智朗,橋立友宏
- 出版社/メーカー: 技術評論社
- 発売日: 2014/06/06
- メディア: 大型本
- この商品を含むブログ (8件) を見る

- 作者: 黒田努,佐藤和人
- 出版社/メーカー: インプレス
- 発売日: 2015/05/29
- メディア: Kindle版
- この商品を含むブログを見る

実践Ruby on Rails 4 現場のプロから学ぶ本格Webプログラミング
- 作者: 黒田努
- 出版社/メーカー: インプレス
- 発売日: 2014/06/27
- メディア: Kindle版
- この商品を含むブログを見る
コメントを残す