【開発日誌/Ruby】f.submitのラベルを動的に切り替えたい
移転しました。
約5秒後に自動的にリダイレクトします。
scaffoldで自動生成された_form.html.erbでsubmitボタンは
<%= form_for(@book) do |f| %> 〜 略 〜 <div class="actions"> <%= f.submit %> </div> <% end %>
のようになっていますよね。
このボタンのラベルって
new.html.erbから呼ばれたときには「create 〜」
edit.html.erbから呼ばれたときには「update 〜」
という感じで設定されているけど、どこで設定してるんだろう?
プロジェクト配下のファイルをGrepしてみてもそれらしい記述がみつからない。。。
固定の値に変えるだけだったら
<%= f.submit "登録" %>
のようにすればいいけど、「登録」「更新」のように動的に設定したいんです。
locales/en.ymlに定義したらいける? → stack overflow
<%= render 'form' %>
するときにラベル名渡すほうが簡単かな? → stack overflow
やり方はいろいろあるけど、そもそもの作りはどうなってるんだー!?
みんな気にしないのか、常識なのか、、、
あまり情報が転がってないので、直接ソースを見てみます。
# Add the submit button for the given form. When no value is given, it checks # if the object is a new resource or not to create the proper label: # # <%= form_for @post do |f| %> # <%= f.submit %> # <% end %> # # In the example above, if @post is a new record, it will use "Create Post" as # submit button label, otherwise, it uses "Update Post". # # Those labels can be customized using I18n, under the helpers.submit key and accept # the %{model} as translation interpolation: # # en: # helpers: # submit: # create: "Create a %{model}" # update: "Confirm changes to %{model}" # # It also searches for a key specific for the given object: # # en: # helpers: # submit: # post: # create: "Add %{model}" # def submit(value=nil, options={}) value, options = nil, value if value.is_a?(Hash) value ||= submit_default_value @template.submit_tag(value, options) end
「In the example above, if @post is a new record, it will use "Create Post" as submit button label, otherwise, it uses "Update Post".」
なるほど。。。
そして、やはりstack overflowで見つけたように、
en.ymlで上書きするのが正しいやり方っぽいですね。
今作ってるアプリでは前回、default_localの設定をjaにしたので、ja.ymlに書くことにします!
(config/locales/ja.yml)
ja: helpers: submit: create: "登録する" update: "更新する"
でけた(`・ω・´)キリッ
(。・ω・)ノシ