编辑:嗯,这很感兴趣。我刚刚注意到,我的注册路线是 /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 不再存在,我认为这没问题,因为它已经发布了它。这有什么关系吗?