mensagem personalizada de validação para trilhos 3

94

Rails introduziu uma nova maneira de validar atributos dentro do modelo. Quando eu uso

validates :title, :presence => true

funciona, mas quando tento adicionar uma mensagem personalizada

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

um erro é gerado

Unknown validator: 'message'
Prabesh Shrestha
fonte

Respostas:

196

Tente isto

validates :title, presence: { message: "Story title is required" }
Shiv
fonte
19
Como faço para remover o: título da mensagem de erro acima? Acima é exibido como "Título da história do título obrigatório". Eu quero "O título da história é obrigatório." Obrigado.
datauser
5
Para onde => truefoi essa resposta? Não é necessário?
davetapley
2
@dukedave estranhamente, não é necessário. Você pode passar qualquer coisa 'verdadeira' para presence.
dano em
1
@NotDan, link quebrado.
stevenspiel
2
@Mayumi - Você pode remover o nome do atributo da mensagem escrevendo uma validação manual e adicionando o erro a :base, por exemploerrors.add(:base, "Story title is required)
Marco Prins
18

Na verdade, fiz isso de uma maneira melhor. Se você deseja remover o título do campo da mensagem, você deve usá-lo em sua visualização _form.htmk.erb:

Como você pode ver dentro desta visualização:

<ul>
  <% @article.errors.full_messages.each do |msg| %>
  <li><%= msg %></li>
  <% end %>
</ul>

Substitua por:

<ul>
  <% @article.errors.each_with_index do |msg, i| %>
  <li><%= msg[1] %></li>
  <% end %>
</ul>
Mateusgf
fonte
Htmk? Ora, eu NUNCA
Marco Prins
1

Uma mensagem personalizada para um booleano com condicionais pode ser:

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

Você pode usar HUMANIZED_ATTRIBUTES dos trilhos 3. Por exemplo, no caso acima, será como:

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

Ele lhe dará uma mensagem de erro, substituindo o título do atributo do modelo por história.

Shyamkkhadka
fonte