0

我正在努力做到这一点,以便当用户注册(即:创建新用户)时,它会将他们重定向到教程。但是,当用户注册时,它会给出一条错误消息,指出用户名和电子邮件必须是唯一的(即使它们是唯一的)并再次呈现“新”页面。

如果我重定向到,这很好@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
4

2 回答 2

0

我想通了 - 部分。

我需要在我的路由文件中为教程添加一个路由:

match "tutorial" => "static#tutorial"

然后重定向到那个而不是字符串:

format.html { redirect_to tutorial_path, success: 'Congratulations on starting your journey!' }

这背后的理论可能有一个完整的解释,但我会把它留给其他人来回答。这就是我解决它的方法。

于 2013-06-28T08:50:37.420 回答
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

于 2013-06-28T07:26:19.353 回答