[rails]ActiveModelを使ったフォームのラベル名を変更する


[まとめ] 現在開催中のKindleセール情報はこちら

DBには保存はしないけれど、ActiveRecordオブジェクトのようにvalidationを使いたい、という場合にActiveModelが使えます。

以下のようにActiveModelを使ってフォームを作成し、

class SampleForm
  include ActiveModel::Model
  attr_accessor :name, :email

  validates :name, presence: true
  validates :email, presence: true
end

viewにform要素を書くと

    <div class="form-group">
      <%= f.label :name, class: "control-label" %>
      <%= f.text_field :name, class: 'form-control', value: @sheet_form.name, placeholder: '氏名' %>
    </div>

そのままだと、label部分が「Name」と表示されます。

form

これを「お名前」と表示したい場合はja.ymlに翻訳名を設定する必要があります。

activerecordではなくactivemodelなので注意。

# config/locales/ja.yml

ja:
  activemodel:
    attributes:
      sheet_form:
        name: 'お名前'
        email: 'メールアドレス'

翻訳名を設定してrails serverを再起動すると正しくお名前と表示されます。

form2

参考

ActiveModel::Model で簡単に ActiveModel の機能を利用する – happy lie, happy life

[まとめ] 現在開催中のKindleセール情報はこちら