验证失败时如何使用先前输入的数据呈现表单
How render form with previously entered data when validation fails
我在做 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>
您永远不会设置输入的值。我建议您使用 rails' 表单助手,例如 form_for
和其他。 https://guides.rubyonrails.org/form_helpers.html#binding-a-form-to-an-object
<%= form_for @user do |f| %>
<%= label :username %>
<%= text_field :username %>
<%= label :email %>
<%= text_field :email %>
<%= label :password %>
<%= password_field :password %>
<%= submit %>
<% end %>
编辑:您链接的教程中甚至有一节告诉您使用 form_for :S
我在做 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>
您永远不会设置输入的值。我建议您使用 rails' 表单助手,例如 form_for
和其他。 https://guides.rubyonrails.org/form_helpers.html#binding-a-form-to-an-object
<%= form_for @user do |f| %>
<%= label :username %>
<%= text_field :username %>
<%= label :email %>
<%= text_field :email %>
<%= label :password %>
<%= password_field :password %>
<%= submit %>
<% end %>
编辑:您链接的教程中甚至有一节告诉您使用 form_for :S