Multiple update forms for one model

微笑、不失礼 提交于 2020-01-15 08:41:08

问题


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

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

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

回答1:


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

Then something like this;

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

** not tested for bugs




回答2:


Its a bit Unorthodox what you are doing, but as you insisted and only its an example, I guess you can handle the update method by doing like this

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

Note: Not Tested!



来源:https://stackoverflow.com/questions/24105785/multiple-update-forms-for-one-model

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!