html - 在 Rails 中加载注册页面时自动填充表单字段
问题描述
我有这个注册表单代码(控制器添加在下面):
<%= form_with(model: @user, class: "shadow p-3 mb-3 bg-info rounded", local: true) do |f|%>
<div class="form-group row">
<%= f.label :username, class: "col-2 col-form-label text-light"%>
<div class="col-10">
<%= f.text_field :username, class: "form-control shadow rounded", placeholder: "Enter a username" %>
</div>
</div>
<div class="form-group row">
<%= f.label :email, class: "col-2 col-form-label text-light"%>
<div class="col-10">
<%= f.email_field :email, class: "form-control shadow rounded", placeholder: "Enter your e-mail address" %>
</div>
</div>
<div class="form-group row">
<%= f.label :password, class: "col-2 col-form-label text-light"%>
<div class="col-10">
<%= f.password_field :password, class: "form-control shadow rounded", placeholder: "Choose a password" %>
</div>
</div>
<div class="form-group row justify-content-center">
<%= f.submit class:"btn btn-outline-light btn-lg" %>
</div>
<% end %>
即使我设置了占位符(占位符:“....”),当我加载页面时,它也会自动填充一些个人值 - 电子邮件 + 密码。
创建用户的控制器代码如下:
class UsersController <ApplicationController
before_action :set_user, only: [:show, :edit, :update, :destroy]
before_action :require_user, only: [:edit, :update]
before_action :require_same_user, only: [:edit, :update, :destroy]
def show
@articles = @user.articles.paginate(page: params[:page], per_page: 2)
end
def index
@users = User.paginate(page: params[:page], per_page: 2)
end
def new
@user = User.new
end
def edit
end
def update
if @user.update(user_params)
flash[:notice] = "Your account information was successfully updated."
redirect_to @user
else
render 'edit'
end
end
def create
@user = User.new(user_params)
if @user.save
session[:user_id] = @user.id
flash[:notice] = "Welcome to the Alpha Blog #{@user.username}, you have successfully signed up."
redirect_to articles_path
else
render 'new'
end
end
def destroy
@user.destroy
session[:user_id] = nil if @user == current_user
flash[:notice] = "Account and all associaed articles successfully deleted."
redirect_to articles_path
end
private
def user_params
params.require(:user).permit(:username, :email, :password) #whitelisting
end
def set_user
@user = User.find(params[:id])
end
def require_same_user
if current_user != @user && !current_user.admin?
flash[:alert] = "You can only edit or delete your own profile"
redirect_to @user
end
end
end
不知道如何禁用它。谢谢!
解决方案
form_with(model: @user, ...
@user
使用变量中的任何内容构建表单。
假设您有这样的用户:
$ @user = User.first
> #<User id: 1, email: "person@email.com", username: "Person", password_digest: [FILTERED]>
在这种情况下,form_with
字段将使用表单中的现有记录值。
如果您在此视图的控制器操作中创建了一个新用户:
$ @user = User.new
> #<User id: nil, email: nil, username: nil, password_digest: nil>
那么表单域应该是空白的。
如何测试这是否是问题:
将您的替换@user
为User.new
:
<%= form_with(model: @user, ...
还有什么可能发生: *
- 浏览器可以自动填充表单数据,Chrome 经常这样做。
- 浏览器扩展程序,如密码管理器,可以自动填充表单数据
推荐阅读
- authentication - 如何使用 2 个不同的密码对 OpenLDAP 中的用户进行身份验证?
- xquery - MarkLogic 错误地按分数排序结果
- mysql - 返回第 4 高值
- c# - 如何在 C# 中优化递归装箱算法
- go - 调试适配器“dlv-dap”将忽略用户指定的“dlvLoadConfig”设置
- apache - modsecurity白名单目录
- arduino - 有没有办法在 Arduino 延迟期间运行部分代码?
- angular - 具有左右间距和固定页脚的 Angular Flex 布局列
- laravel - laravel - 混合清单不存在
- java - 如何从另一个位置添加 textView 的第二行