如何显示命名空间的验证错误? Ruby on rails

时间:2013-05-26 21:44:51

标签: ruby-on-rails

我无法弄清楚如何做到这一点..我在名为admin的命名空间内的用户控制器中,这就是我的表单的样子:

<%= form_for [:admin, @user] do |f| %>
    <% if @user.errors.any? %>
        <div class="reg-error">  
            <h4>Could not send registration!</h4>
            <ul>
                <% for message in @user.errors.full_messages %>
                    <li><%= message %></li>
                <% end %>
            </ul>
        </div>
    <% end %>
    <%= f.label :email %><br>
    <%= f.text_field :email %><br><br>
    <%= f.label :rank %><br>
    <%= f.select :rank, options_for_select([1, 2, 3, 4, 5]) %><br><br>
    <%= f.submit "Send registration", :confirm => "Are you sure?" %>
<% end %>

正如您所看到的,我正在使用[:admin, @user]表单,但只使用@user.errors.any?替换[:admin, @user].errors.any?

它自己运行的表单很好,但它不会显示验证错误。

我该怎么做?

更新 - 已解决

我没有告诉你我的控制器,我在那里发现了错误..

if @user.save
  UserMailer.invitation_mail(@user).deliver
  redirect_to admin_manage_users_path, :notice => "Successfully added a new account! Mail has been sent"
else
  @user = User.new
  @registered_users = User.where(:reg_key => nil)
  @pending_users = User.where("users.reg_key IS NOT NULL")
  render "show"
end

由于我在else语句中有@user = User.new,因此它重置了错误消息。完全错过了那一个。如果其他人也会做这个简单的错误,我会把它留在这里。感谢回复。

1 个答案:

答案 0 :(得分:0)

尝试进行以下更改:

form_for @user do |f|
  if @user.errors.any?
    ...
    @user.errors_full_messages.each do |message|
      <li><%= message %></li>

如果这不起作用,你可以告诉我你的控制器是什么样的。例如,在您的users_controller中,您使用的方法是:

@user = Admin::User.new