我正在使用Rails 3.2.2并且在验证失败时没有获得field_with_errors div。
视图/会话/ new.html.erb
<%= form_tag sessions_path do %>
<p><%= label_tag :email %><br />
<%= email_field_tag :email %></p>
<p><%= label_tag :password %><br />
<%= password_field_tag :password %></p>
<p><%= submit_tag "Log in" %></p>
<% end %>
控制器/ sessions_controller.rb
def create
user = User.find_by_email(params[:email])
if user && user.authenticate(params[:password]) && user.account.subdomain == request.subdomain
session[:user_id] = user.id
redirect_to home_path
flash[:notice] = "Logged in!"
else
flash.now[:error] = "Invalid email or password"
render 'new'
end
end
模型/ user.rb
attr_accessible :first_name, :last_name, :email, :password, :password_confirmation
has_secure_password
validates :email, :presence => true, :uniqueness => true
validates :password, :presence => true, :on => :create
我收到了flash消息,但是如果验证失败,我的视图不会渲染field_with_errors包装div。有什么想法吗?
感谢。
答案 0 :(得分:2)
默认情况下不再包含它,您需要呈现自己的错误消息。
以下是在Post
模型的脚手架中生成的一些示例代码:
<% if @post.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2>
<ul>
<% @post.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
然后,您可以将其提取为部分,以便与其他模型一起重复使用。
答案 1 :(得分:1)
我认为field_with_errors
功能仅适用于form_for
。如果需要,可以更改authenticate
方法以向@user
对象添加错误(它必须是一个实例变量才能使其工作),然后将表单更改为:
<%= form_for(@user) do |f| %>
<%= f.error_messages %>
<p><%= f.label :email %><br />
<%= f.email_field :email %></p>
<p><%= f.label :password %><br />
<%= f.password_field :password %></p>
<p><%= f.submit "Log in" %></p>
<% end %>