Ruby on rails 如果保存后重定向不是保存的对象,则验证失败
我试图这样做,当一个用户注册时(即:创建了一个新用户),它会将他们重定向到教程。但是,当用户注册时,它会给出一条错误消息,说明用户名和电子邮件必须是唯一的(即使是唯一的),并再次呈现“新”页面 如果我改为重定向到Ruby on rails 如果保存后重定向不是保存的对象,则验证失败,ruby-on-rails,validation,Ruby On Rails,Validation,我试图这样做,当一个用户注册时(即:创建了一个新用户),它会将他们重定向到教程。但是,当用户注册时,它会给出一条错误消息,说明用户名和电子邮件必须是唯一的(即使是唯一的),并再次呈现“新”页面 如果我改为重定向到@user,效果很好 这是我的控制器: def create @user = User.new(params[:user]) respond_to do |format| if @user.save login(@user)
@user
,效果很好
这是我的控制器:
def create
@user = User.new(params[:user])
respond_to do |format|
if @user.save
login(@user)
format.html { redirect_to "static/tutorial", success: 'Congratulations on starting your journey!' }
format.json { render json: @user, status: :created, location: @user }
else
format.html { render action: "new" }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
下面是User.rb中的相关行:
validates_confirmation_of :plain_password
validates_presence_of :name, :username, :email
validates_presence_of :plain_password, :on => :create
validates_uniqueness_of :email, :username
当我看到这一点时,我非常害怕
validates_presence_of :plain_password, :on => :create
您是否正在数据库中保存未加密的密码
关于您的问题,您可以考虑使用<代码>响应d> <代码> >代码>响应>
class UsersController < ApplicationController
respond_to :html, :json
def new
@user = User.new
end
def create
@user = User.new(params[:user])
if @user.save
# set sessions
end
respond_with @user, location: 'static/tutorial'
end
end
class UsersController
读了这篇博文我发现了——部分原因 我需要在我的路线文件中将路线添加到教程中:
match "tutorial" => "static#tutorial"
然后重定向到它,而不是字符串:
format.html { redirect_to tutorial_path, success: 'Congratulations on starting your journey!' }
这背后的理论可能有一个完整的解释,但我将留给其他人来回答。我就是这样解决的。您应该考虑重构代码。您没有理由像现在这样需要在
respond\u to
块中执行条件逻辑。@zeantsoi这是rails生成器生成的代码,当您考虑它时,它是非常合理的。没有理由不把条件逻辑放在respond_to
块中。哈哈,没有。。plain_password是一个attr_访问器,然后将其加密到数据库中名为password的字段中。在数据库中它真的应该被称为hashd_password,但我已经称它为password,所以我没有费心修改它。谢谢你的关心!!是的,您需要在路由文件中定义应用程序的每个可访问路径。我建议使用get
语法。阅读本节,static
controller中的所有页面都可用于get请求,使用match'static/:action',:controller=>“static”