0

编辑:嗯,这很感兴趣。我刚刚注意到,我的注册路线是 /signup。但是,一旦我提交信息并且表单返回无效,我就在路线 /users 中。


我正在构建一个简单的应用程序来学习 Rails,并且我已经学会了设置身份验证系统。

今天,我添加了一个新的计划表,为用户进行不同的订阅。Plan 模型有_many 用户,并且用户属于计划。实施此操作后,我看到如果输入无效信息,错误消息将不再显示在视图中。

我在 application.html.erb 文件中有以下代码显示它->

  <% flash.each do |key, value| %>
    <div class="alert alert-<%= key %>"><%= value %></div>
  <% end %>

它在其他通知上工作正常,但没有显示错误消息。

还需要注意的一件事是,例如,如果我错误地输入了一封电子邮件,Rails 会通过以红色突出显示它来告诉我这是问题所在(之前编辑过的 CSS 来做到这一点)。但是,错误消息本身无处可寻:P

这是我的用户控制器:

class UsersController < ApplicationController

  before_filter :signed_in_user, only: [:show]
  before_filter :correct_user,   only: [:show]

    def show
    @user = User.find(params[:id])
    end

    def new
  plan = Plan.find(params[:plan_id])
    @user = plan.users.build
    end

  def create
    @user = User.new(params[:user])
    if @user.save
      sign_in @user
      flash[:success] = "Welcome to the Sample App!"
      redirect_to @user
    else
      render 'new'
    end
  end

  def index

    if current_user
      redirect_to(user_path(current_user))
    else
    redirect_to(root_path)
    end
  end

  private

    def signed_in_user
      unless signed_in?
        store_location
        redirect_to login_url, notice: "Please sign in."
      end
    end

    def correct_user
      @user = User.find(params[:id])
      redirect_to(root_path) unless current_user?(@user)
    end
end

我做了一些研究,人们一直在说这可能是因为重定向,但我不确定我是否正在这样做。

不过,当第一次访问注册时,它采用 /signup?plan_id=1 的形式,在注册表单中使用 plan_id 填充隐藏字段。当它显示错误屏幕时,plan_id 不再存在,我认为这没问题,因为它已经发布了它。这有什么关系吗?

4

1 回答 1

0

我认为问题在于您期望看到的错误消息是User对象上的错误,而不是存储在闪存中。在你看来试试这个:

<% @user.errors.full_messages.each do |error_message| %>
  <div class="alert"><%= error_message %></div>
<% end %>

有关更多信息,请参阅ActiveModel::Errors的文档。

于 2012-10-02T14:43:33.153 回答