Ruby on rails 如何在Rails3中的输入字段旁边添加自定义验证错误消息?

Ruby on rails 如何在Rails3中的输入字段旁边添加自定义验证错误消息?,ruby-on-rails,twitter-bootstrap,Ruby On Rails,Twitter Bootstrap,查看页面中的我的代码(views/session/new.html.erb): sessions_path)do | f |%> 我已经在模型文件中编写了正确的验证代码。 但我希望在提交时,验证错误应该出现在字段附近,而不是页面顶部 提前谢谢 您可以访问具有错误的不同模型属性的错误消息的值类似于错误的散列[:some\u attribute\u name]。只要您的自定义验证器将错误消息存储在正确的模型属性中,您就可以这样做 sessions_path)do | f |%> 我会让您担心

查看页面中的我的代码(views/session/new.html.erb):

<%=form_for(:session,:url=>sessions_path)do | f |%>
<%end%>
我已经在模型文件中编写了正确的验证代码。 但我希望在提交时,验证错误应该出现在字段附近,而不是页面顶部


提前谢谢

您可以访问具有
错误的不同模型属性的错误消息的值
类似于
错误的散列[:some\u attribute\u name]
。只要您的自定义验证器将错误消息存储在正确的模型属性中,您就可以这样做

<%=form_for(:session,:url=>sessions_path)do | f |%>
<%end%>

我会让您担心错误如何显示在表单和内容旁边。:)

如果您倾向于使用Rails内置的服务器端验证,您可以检查是否存在验证错误,如果存在,则打印它们:

<%= form_for(:session, :url => sessions_path) do |f| %>

  <%= f.label :email, 'Username'%>
  <%= f.text_field :email %>
  <% if f.object.errors[:email] %>
    <%= f.object.errors[:email].join(", ") %>
  <% end %>

  <%= f.label :password %>
  <%= f.password_field :password %>
  <% if f.object.errors[:password] %>
    <%= f.object.errors[:password].join(", ") %>
  <% end %>

  <%= f.submit 'Login'%>
  <%= link_to 'Forgot Your Password?', new_password_reset_path >

<% end %>

我会这样说:

<%= form_for(:session, :url => sessions_path) do |f| %>
  <%= f.label :email, 'Username' %>
  <%= f.text_field :email %>
  <%= f.object.errors[:email].to_sentence if f.object.errors[:email] %>
<% end %>
sessions_path)do | f |%>

我想你会找到剩下的。

我可以得到最后一行,但我的疑问是在哪里显示这些错误消息,以及如何将它们精确地放置在我的文本字段附近。我一定是傻到可以问,但请注意回答。您可以使用普通的HTML和CSS以及Ruby特定的标记。例如,您可以将标签、文本字段和错误(如果有)放在一个标记中,这样可以确保它们显示在一行中。您可能需要添加一些CSS来设置错误的样式,因此可能需要将错误文本放在一些样式中,并在样式表中相应地设置它的样式。我可以得到最后一行,但我的疑问是在哪里呈现这些错误消息,以及如何将它们精确地放置在我的文本字段附近。我一定是够傻的问,但请注意回答。你需要应用一些CSS来让这个工作。尝试应用
显示:内联块;浮动:左
到文本字段和包装错误文本的任何内容。请参阅“我的答案”的更新,以了解您指定的潜在格式设置方法。
<%= f.text_field :email, :address, :style => "display: inline-block; float: left;" %>
<% if f.object.errors[:email] %>
  <span style="display: inline-block; float: left;">
    <%= f.object.errors[:email].join(", ") %>
  </span>
<% end %>
<div style="clear: left;"></div>
<%= form_for(:session, :url => sessions_path) do |f| %>
  <%= f.label :email, 'Username' %>
  <%= f.text_field :email %>
  <%= f.object.errors[:email].to_sentence if f.object.errors[:email] %>
<% end %>