如果您倾向于使用 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
通过调用从块内访问对象的属性f.object
。
其次,由于某些字段可能会产生多个验证错误,因此您需要按顺序将它们打印出来。使用 Ruby 的join
方法可以帮助您以连贯的方式连接它们。
更新:
如果您希望错误直接呈现在相应的文本字段旁边,则需要应用一些 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>