Railsはモデル内の属性を検証する新しい方法を導入しました。使用するとき
validates :title, :presence => true
動作しますが、カスタムメッセージを追加しようとすると
validates :title, :presence => true,:message => "Story title is required"
エラーが生成されます
Unknown validator: 'message'
これを試して
validates :title, presence: { message: "Story title is required" }
実際、私はこれをより良い方法で行いました。メッセージからフィールドタイトルを削除する場合は、_form.htmk.erbビューでこれを使用する必要があります。
このビュー内で見ることができるように:
<ul>
<% @article.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
次のように置き換えます:
<ul>
<% @article.errors.each_with_index do |msg, i| %>
<li><%= msg[1] %></li>
<% end %>
</ul>
条件付きのブール値のカスタムメッセージは次のようになります。
validates :foo, inclusion: { in: [true, false], message: "cannot be blank" }, if: :bar?
Rails 3のHUMANIZED_ATTRIBUTESを使用できます。上記の例では、次のようになります。
HUMANIZED_ATTRIBUTES = {
:title => "story"
}
def self.human_attribute_name(attr, options={})
HUMANIZED_ATTRIBUTES[attr.to_sym] || super
end
エラーメッセージが表示され、モデル属性のタイトルがストーリーに置き換えられます。