web-dev-qa-db-ja.com

Rails 3の検証カスタムメッセージ

Railsはモデル内の属性を検証する新しい方法を導入しました。使用するとき

validates :title, :presence => true

動作しますが、カスタムメッセージを追加しようとすると

validates :title, :presence => true,:message => "Story title is required"

エラーが生成されます

Unknown validator: 'message'
93

これを試して

validates :title, presence: { message: "Story title is required" }
192
Shiv

実際、私はこれをより良い方法で行いました。メッセージからフィールドタイトルを削除する場合は、_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>
18
Mateusgf

条件付きのブール値のカスタムメッセージは次のようになります。

validates :foo,  inclusion: { in: [true, false], message: "cannot be blank" }, if: :bar?
1
mr.musicman

Rails 3のHUMANIZED_ATTRIBUTESを使用できます。上記の例では、次のようになります。

HUMANIZED_ATTRIBUTES = {
:title => "story"
}
 def self.human_attribute_name(attr, options={})
    HUMANIZED_ATTRIBUTES[attr.to_sym] || super
end

エラーメッセージが表示され、モデル属性のタイトルがストーリーに置き換えられます。

0
Shyamkkhadka