我希望在一个页面上有多个表单。让我们举个例子来理解我想要的东西:
我有一个管理员页面,让我们说它是admins#show
页面。我的管理员必须在此页面的一个表单上更改他的名字,并在另一个表单上更改他的年龄。我知道我可以创建一个表单,但我希望有多个表单(因为这只是一个例子)。所以我的admins#show
页面看起来像这样:
<%= form_for @admin do |a| %>
<%= a.label :name %>
<%= a.text_field :name %>
<%= a.submit "Submit name change" %>
<% end %>
<%= form_for @admin do |e| %>
<%= e.label :age %>
<%= e.number_field :age %>
<%= e.submit "Submit age change" %>
<% end %>
但在我的控制器中,我真的不知道它是如何工作的,这是我的问题。我想我有类似的东西,但是如何在更新方法中划分表单输入?:
def edit
@admin = Admin.find(params[:id])
end
def update
@admin= Admin.find(params[:id])
if @admin.update_attributes(:name=> admin_params1[:name])
redirect_to @admin
else
render 'edit'
end
if @admin.update_attributes(:age=> admin_params2[:age])
redirect_to @admin
else
render 'edit'
end
end
private
def admin_params1
params.require(:admin).permit(:name)
end
def admin_params2
params.require(:admin).permit(:age)
end
答案 0 :(得分:3)
它有点非正统你正在做什么,但是当你坚持并且只有示例时,我想你可以处理<像这样做
的强>update
方法
def update
@admin= Admin.find(params[:id])
if params[:commit] == "Submit name change"
if @admin.update_attributes(admin_params1)
redirect_to @admin
else
render 'edit'
end
elsif params[:commit] == "Submit age change"
if @admin.update_attributes(admin_params2)
redirect_to @admin
else
render 'edit'
end
end
end
注意:未经测试!
答案 1 :(得分:2)
好吧,我认为您可以在控制器中创建其他非REST方法,然后在config / routes中添加命名路由,然后添加两个与此类似的不同形式;
<%= form_for :admin_name, url: admin_name_path, method: :post do |a| %>
<%= a.label :name %>
<%= a.text_field :name %>
<%= a.submit "Submit name change" %>
<% end %>
<%= form_for :admin_age, url: admin_age_path, method: :post do |e| %>
<%= e.label :age %>
<%= e.number_field :age %>
<%= e.submit "Submit age change" %>
<% end %>
然后是这样的事情;
def update_age
@admin = Admin.find(params[:admin_age][:id])
if params[:admin_age]
@admin.update_attributes(:age=> params[:admin_age][:age])
redirect_to @admin
else
render 'edit'
end
end
def update_name
@admin = Admin.find(params[:admin_name][:id])
if params[:admin_name]
@admin.update_attributes(:name=> params[:admin_name][:name])
redirect_to @admin
else
render 'edit'
end
end
**没有测试错误