Ruby on rails 在Rails用户表单中包含字段,但不在params[:user]散列中
我正在尝试为Ruby on rails 在Rails用户表单中包含字段,但不在params[:user]散列中,ruby-on-rails,forms,hash,Ruby On Rails,Forms,Hash,我正在尝试为user创建一个表单。在这种形式中,他们指定了他们想要加入的团队。每个团队都有一个与其关联的密码,以便于加入该团队。我试图将其包含在表单中,但很自然,它最终会包含在params[:user]hash中。这很烦人,因为我不需要这些信息来创建新的user记录。是否有办法将此密码包含在控制器的验证字段中,但不将其包含在params[:user]hash中?如果没有,是否有一种干净的方法可以在用户创建过程中从哈希中删除不需要的值?您可以这样做,从参数[:user]中删除团队密码: def
user
创建一个表单。在这种形式中,他们指定了他们想要加入的团队。每个团队
都有一个与其关联的密码,以便于加入该团队
。我试图将其包含在表单中,但很自然,它最终会包含在params[:user]
hash中。这很烦人,因为我不需要这些信息来创建新的user
记录。是否有办法将此密码包含在控制器的验证字段中,但不将其包含在params[:user]
hash中?如果没有,是否有一种干净的方法可以在用户
创建过程中从哈希中删除不需要的值?您可以这样做,从参数[:user]
中删除团队密码
:
def user_params
params[:user].except(:team_password)
end
如果您的控制器中已经定义了user\u参数
,则您可以将链接到现有的user\u参数
方法中,除了(:team\u password)
:
def user_params
params.require(:user).permit(.....).except(:team_password)
end
使用密码\u字段
并将其放入表单中
可以使用表单生成器创建表单
<%= form_for @user do %>
<%= password_field_tag :password %>
...
<% end %>
这样,即使使用表单生成器,该字段也将作为顶级参数传递,而不会嵌套在用户参数中。您可以使用params[:password]
获取它
另一种选择是将其保留在用户属性中,并从散列中删除该值,但是我个人不喜欢尽可能修改输入参数。我不确定我是否解释得足够好。用户需要输入密码,但一旦它被用于验证他们是否可以加入给定的团队,用户创建就不再需要它,因此我尝试将其从params[:user]散列中移出。在尝试显示的方法时,team_密码值也仍然在params[:user]中。很抱歉造成混淆。您可以像这样从控制器的哈希中删除它:params[:user]。删除:team\u password
或者,您也可以这样做:params[:user]。除了(:team\u password)
像我更新的答案。哦,知道这个很好。谢谢你的帮助!
<%= form_tag ... do %>
<%= password_field_tag :password %>
...
<% end %>