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


94

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

validates :title, :presence => true

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

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

エラーが発生する

Unknown validator: 'message'

回答:


196

これを試して

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

19
上記のエラーメッセージから:titleを削除するにはどうすればよいですか?上記は「タイトルストーリーのタイトルが必要です」と表示されます。「ストーリーのタイトルが必要です。」ありがとう。
データユーザー、2011年

5
=> trueこの答えはどこに行ったのですか?必要ありませんか?
davetapley

2
奇妙なことに@dukedaveは必要ありません。「真実」は何でも渡すことができpresenceます。
危害

1
@NotDan、リンク切れ。
stevenspiel 2014年

2
@Mayumi-たとえば、手動検証を記述してエラーを:baseに追加することにより、メッセージから属性名を削除できますerrors.add(:base, "Story title is required)
Marco Prins

18

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

htmk?なぜ、私は絶対にしない
Marco Prins

1

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

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

0

レールのHUMANIZED_ATTRIBUTESを使用できます3。たとえば上記の場合、次のようになります。

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.