更改 form_for 提交的 ActiveModel
Changing the ActiveModel submitted by a form_for
我有一个允许我的管理员创建用户的表单。我正在使用 STI,因此管理员可以指定 Admin
或 User
的类型。如果我提交包含无效信息的表单并且保存失败,我的控制器将使用 @user
模型重新呈现表单,如下所示:
def create
@user = User.new(user_params)
if @user.save
redirect_to admin_users_path, notice: "#{@user.first_name} #{@user.last_name} user created"
else
render :new
end
end
我 运行 的问题是提交按钮现在提交的散列包含 admin
的信息而不是 user
,这意味着我的白名单参数方法没有工作:
def user_params
params.require(:user).permit(:email, :first_name, :last_name, :password,
:password_confirmation, :type, :role_id)
end
有什么方法可以修改提交按钮,使其作为 user
而不是 admin
提交?
以及带有按钮的视图:
.col-md-6.col-md-offset-3
= form_for [:admin, @user], html: {role: :form}, url: admin_users_path do |f|
- if @user.errors.any?
%h2= "#{pluralize(@user.errors.count, "error")} prohibited this user from being saved:"
%ul
- @user.errors.full_messages.each do |msg|
%li= msg
.row
#first_name.form-group
= f.label :first_name
= f.text_field :first_name, autofocus: true, class: 'form-control'
.row
#last_name.form-group
= f.label :last_name
= f.text_field :last_name, class: 'form-control'
.row
#email.form-group
= f.label :email
= f.email_field :email, class: 'form-control'
.row
.col-md-6
#user_type.form_group
= f.label :type
= f.select :type, options_for_select(%w{Customer Admin}, selected: @user.type), class: 'form-control'
.col-md-6
#admin_role.form-group
= f.label :role
= f.collection_select :role_id, Role.all, :id, :name
.row
#password.form-group
= f.label :password
= f.password_field :password, class: 'form-control'
.row
#password_confirmation.form-group
= f.label :password_confirmation
= f.password_field :password_confirmation, class: 'form-control'
#submit.actions.text-center
= f.submit
您可以在 form_for
中添加 as: :user
选项。 Rails docs.
中有更多详细信息
我有一个允许我的管理员创建用户的表单。我正在使用 STI,因此管理员可以指定 Admin
或 User
的类型。如果我提交包含无效信息的表单并且保存失败,我的控制器将使用 @user
模型重新呈现表单,如下所示:
def create
@user = User.new(user_params)
if @user.save
redirect_to admin_users_path, notice: "#{@user.first_name} #{@user.last_name} user created"
else
render :new
end
end
我 运行 的问题是提交按钮现在提交的散列包含 admin
的信息而不是 user
,这意味着我的白名单参数方法没有工作:
def user_params
params.require(:user).permit(:email, :first_name, :last_name, :password,
:password_confirmation, :type, :role_id)
end
有什么方法可以修改提交按钮,使其作为 user
而不是 admin
提交?
以及带有按钮的视图:
.col-md-6.col-md-offset-3
= form_for [:admin, @user], html: {role: :form}, url: admin_users_path do |f|
- if @user.errors.any?
%h2= "#{pluralize(@user.errors.count, "error")} prohibited this user from being saved:"
%ul
- @user.errors.full_messages.each do |msg|
%li= msg
.row
#first_name.form-group
= f.label :first_name
= f.text_field :first_name, autofocus: true, class: 'form-control'
.row
#last_name.form-group
= f.label :last_name
= f.text_field :last_name, class: 'form-control'
.row
#email.form-group
= f.label :email
= f.email_field :email, class: 'form-control'
.row
.col-md-6
#user_type.form_group
= f.label :type
= f.select :type, options_for_select(%w{Customer Admin}, selected: @user.type), class: 'form-control'
.col-md-6
#admin_role.form-group
= f.label :role
= f.collection_select :role_id, Role.all, :id, :name
.row
#password.form-group
= f.label :password
= f.password_field :password, class: 'form-control'
.row
#password_confirmation.form-group
= f.label :password_confirmation
= f.password_field :password_confirmation, class: 'form-control'
#submit.actions.text-center
= f.submit
您可以在 form_for
中添加 as: :user
选项。 Rails docs.