Ответ 1
Попробуйте это
validates :title, presence: { message: "Story title is required" }
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?
Вы можете использовать HUMANIZED_ATTRIBUTES рельсов 3. Например, в приведенном выше случае это будет выглядеть так:
HUMANIZED_ATTRIBUTES = {
:title => "story"
}
def self.human_attribute_name(attr, options={})
HUMANIZED_ATTRIBUTES[attr.to_sym] || super
end
Это даст вам сообщение об ошибке, заменив название атрибута модели историей.