验证失败时如何使用先前输入的数据呈现表单

时间:2019-07-13 13:41:21

标签: ruby-on-rails ruby forms parameters render

我正在www.theodinproject.com Project: Forms。如果新用户未能通过验证,则应该render :new使用先前输入的数据。我的代码可以保存新用户,并且在验证失败但之前输入的数据丢失的情况下可以render :new保存它。

试图自己研究解决方案,但无法解决。抱歉,如果发布了类似的问题。

我的路线

Rails.application.routes.draw do
  resources :users, only: [:new, :create]
end

我的用户控制器

class UsersController < ApplicationController

  def new
    @user = User.new
  end

  def create
    # @user = User.new(username: params[:username], email: params[:email], password: params[:password])
    @user = User.new(user_params)
    if @user.save
      redirect_to new_user_path
    else
      render :new
    end
  end

  private

  def user_params
    params.require(:user).permit(:username, :email, :password)
  end

end

和我的new.html.erb

<form accept-charset="UTF-8" action="/users" method="post">
  <input type="hidden" name="authenticity_token" value="<%= form_authenticity_token %>">
  <label for="user[username]">Username:</label>
  <input type="text" name="user[username]"><br>
  <label for="user[email]">email:</label>
  <input type="text" name="user[email]"><br>
  <label for="user[password]">password:</label>
  <input type="password" name="user[password]"><br>
  <input type="submit" value="Submit">
</form>

1 个答案:

答案 0 :(得分:3)

您永远不会设置输入的值。我建议您使用‘html’, $html 之类的Rails表单帮助程序,其余的使用。 https://guides.rubyonrails.org/form_helpers.html#binding-a-form-to-an-object

SourcePath

编辑:您链接的教程中甚至还有一节告诉您使用form_for:S