ここに別の方法があります:
このテンプレートを使用する場合:
<% if @thing.errors.any? %>
<ul>
<% @thing.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
<% end %>
次のような独自のカスタムメッセージを作成できます。
class Thing < ActiveRecord::Base
validate :custom_validation_method_with_message
def custom_validation_method_with_message
if some_model_attribute.blank?
errors.add(:_, "My custom message")
end
end
このように、アンダースコアのため、メッセージ全体が「私のカスタムメッセージ」になりますが、最初の余分なスペースは目立ちません。最初に余分なスペースが必要ない場合は、.lstrip
メソッドを追加してください。
<% if @thing.errors.any? %>
<ul>
<% @thing.errors.full_messages.each do |message| %>
<li><%= message.lstrip %></li>
<% end %>
</ul>
<% end %>
String.lstripメソッドは、 ':_'によって作成された余分なスペースを取り除き、その他のエラーメッセージは変更しません。
またはさらに良いことに、カスタムメッセージの最初の単語をキーとして使用します。
def custom_validation_method_with_message
if some_model_attribute.blank?
errors.add(:my, "custom message")
end
end
これで、メッセージ全体が「My custom message」になり、余分なスペースはありません。
メッセージ全体を「URLを空白にすることはできません」のように大文字で始まる単語で開始する場合は、実行できません。代わりに、他の単語をキーとして追加してみてください。
def custom_validation_method_with_message
if some_model_attribute.blank?
errors.add(:the, "URL can't be blank")
end
end
メッセージ全体は「URLを空白にすることはできません」になります