一个模型有多个更新表格 [英] Multiple update forms for one model

查看:65
本文介绍了一个模型有多个更新表格的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在一页上有多种形式.让我们举一个例子来了解我想要什么:

I want to have multiple forms on one page. Let's make an example to understand what I want:

我有一个供管理员使用的页面,假设它是admins#show页面.我的管理员必须在此页面上的一种表格上更改其姓名,并在其年龄上另一种表格上更改其姓名.我知道我可以创建一个表单,但是我想拥有多个表单(因为这只是一个示例).所以我的admins#show页面看起来像这样:

I have a page for my admins, let's say it's the admins#show page. My admin has to change his name on one form on this page and on another form his age. I know I could create one form but I want to have multiple forms (because this is just an example). So my admins#show page looks something like this:

<%= 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 %>

但是在我的控制器中,我真的不知道它是如何工作的,这是我的问题.我想我有这样的东西,但是如何在update方法中划分表单输入呢?:

But in my controller, I don't know really how this works and here is my problem. I think I have something like this, but how could I divide the form inputs in the update method?:

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

推荐答案

好吧,我认为您可以在控制器中创建其他非REST方法,然后在配置/路由中添加命名路由,然后添加类似于以下两种形式这个;

Well, I think you could create other non-REST methods in the controller and then add named routes in your config/routes then add your two different forms similar to this;

<%= 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

**未测试错误

这篇关于一个模型有多个更新表格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆