我试图让它成为当用户注册时(即:创建一个新用户),它会将它们重定向到教程。但是,当用户注册时,它会显示一条错误消息,指出用户名和电子邮件必须是唯一的(即使它们是)并再次呈现“新”页面。
如果我重定向到@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
答案 0 :(得分:0)
当我看到我很害怕时
validates_presence_of :plain_password, :on => :create
您是否在数据库中保存了未加密的密码?
关于您的问题,您可以考虑使用respond_to
/ respond_with
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
阅读此博客文章http://bendyworks.com/geekville/tutorials/2012/6/respond-with-an-explanation
答案 1 :(得分:0)
我想出来了 - 部分。
我需要在路线文件中添加一个指向教程的路径:
match "tutorial" => "static#tutorial"
然后重定向到该而不是字符串:
format.html { redirect_to tutorial_path, success: 'Congratulations on starting your journey!' }
这背后的理论可能有一个完整的解释,但我会留给别人回答。这就是我解决它的方法。