ruby-on-rails - 仅编辑 Rails 中的某些字段
问题描述
我有一个用户模型,其中包含 first_name、last_name、email 和 password 字段。用户在其用户个人资料页面下注册后,我希望允许某些字段而不是其他字段显示在表单上以更新部分用户信息。
例如,当我为他们呈现表单以编辑其姓名时,我希望仅将 first_name 显示为字段。我该如何处理?我应该创建一个新的路由和一个控制器动作来让我只更新这个字段吗?还是我只是隐藏所有其他字段并在后台提交它们而不让用户看到它们?
<div class="signup_user">
<div class="container-fluid">
<div class="col-md-5 col-sm-12 centered">
<%= form_for(@user) do |form| %>
<%= render "shared/errors", object: @user %>
<%= render "shared/flash" %>
<div class="card card-default">
<div class="card-body">
<h1>Create account</h1>
<%= form.label :first_name %>
<%= form.text_field :first_name, size: 40, autofocus: true, class: "required form-control" %>
<%= form.label :last_name %>
<%= form.text_field :last_name, size: 40, class: "required form-control" %>
<%= form.label :email %>
<%= form.email_field :email, size: 40, class: "required form-control" %>
<%= form.label :password %>
<%= form.password_field :password, size: 40, placeholder: "At least 10 characters", class: "required form-control" %>
<%= form.label :password_confirmation, "Confirm Password" %>
<%= form.password_field :password_confirmation, size: 40, class: "required form-control" %><br>
<%= form.submit "Submit", class: 'btn btn-block btn-outline-primary' %>
<% end %>
<hr>
<p>Already have an account? <%= link_to "Sign In", new_session_path %></p>
</div>
</div>
</div>
</div><!--./container-->
</div><!--./signup_user-->
在初始注册后,我只想显示 1 个这样的字段,仅用于编辑用户名。
<div class="signup_user">
<div class="container-fluid">
<div class="col-md-5 col-sm-12 centered">
<%= form_for(@user) do |form| %>
<%= render "shared/errors", object: @user %>
<%= render "shared/flash" %>
<div class="card card-default">
<div class="card-body">
<%= form.label :first_name %>
<%= form.text_field :first_name, size: 40, autofocus: true, class: "required form-control" %>
</div>
</div><!--./container-->
</div><!--./signup_user-->
解决方案
我会在控制器上定义两个强参数:
def create_params
params.require(:user).permit(:first_name, :last_name, :email, :password)
end
def update_params
params.require(:user).permit(:email, :password)
end
然后在您的create
/update
方法中只允许每个不同的定义。如果您只是根据操作限制参数,则不需要新视图或新模型。
def create
@user.create(create_params)
redirect_to users_path
end
def update
@user.update_attributes(update_params)
redirect_to users_path
end
对我来说很有意义,这样你就不必创造任何多余的东西。然后字段将以应有的方式以安全的方式被拒绝。然后你可以用action_name == 'edit'
或类似的方式调整视图。
推荐阅读
- node.js - 如何部署使用 tgz 文件作为依赖项的 Google Cloud 函数?
- java - 如何遍历这个二维数组。它适用于 4x4,但除此之外没有
- python - 启动 Python 进程后 wait() 返回 -1, errno=10
- javascript - “event =>”在 RxJS 中做了什么?
- javascript - 执行“expo init”命令时出现以下错误
- python - 将数据框的所有行转换为数组并传递给函数
- reactjs - 反应图标的导入错误。找不到模块:无法解析“/usr/src/app/src/...”中的“react-icons/io”
- angular - 使用自定义表单控件和值访问器进行反应式表单验证
- hiveql - 带有空表的 Hive SQL 查询
- tensorflow - 如何使用自定义激活函数在 tensorflow 中构建神经网络?