【问题标题】:Two forms having the same action具有相同作用的两种形式
【发布时间】:2010-09-29 18:20:37
【问题描述】:

我的 rails 应用程序中有两个表单。它们都存在于单独的选项卡中,当我提交一个表单时,我希望也保存另一个表单中的数据。我该怎么做?或者有没有更好的方法来代替使用两个单独的表格?有没有更好的方法将长表单分散到多个选项卡中,当我按下提交时,所有选项卡中的所有数据都应该达到我的操作。谢谢。

【问题讨论】:

    标签: html ruby-on-rails forms


    【解决方案1】:

    您可以扩展单个表单以涵盖两个表单的所有元素。

    这完全没问题,只要表单标签有效地适合 X/HTML。

    <form action='action1'>
        <!-- All elements from both forms, plus tabs, etc. -->
    </form>
    

    唯一需要考虑的是,该区域内是否还会有另一个表单需要执行另一个操作。例如,如果您在其他两个选项卡之间添加第三个选项卡,则会有不同的操作。

    你不想这样结束:

    <form action='action1'>
    
        <!-- elements from the combined forms -->
    
        <form action='action2'>
            <!-- elements for a totally different form, not valid inside another form -->    
        </form>
    
        <!-- more elements from the combined forms -->
    
    </form>
    

    在这种情况下,最好在提交时使用 JavaScript 合并两个表单。

    jQuery (jquery.com) 会让这很容易。例如,您可以序列化这两种形式,然后将它们连接起来并通过 post 或 get 将结果发送到服务器。

    http://docs.jquery.com/Ajax/serialize

    可能有更好的方法可以做到这一点,但我想不出任何办法。

    【讨论】:

      【解决方案2】:

      我现在无法测试这个概念是否有效,但我相信你可以使用 jQuery 来实现这一点,它的提交功能将拦截任何选项卡上的所有表单提交,类似于这些内容

      $("form").submit(function(event){  
          event.preventDefault();  
          //serialize forms here and submit using jquery post  
      });  
      

      【讨论】:

        【解决方案3】:

        您应该查看 fields_for 方法。你可以这样做:

        <% form_for @house do |f| %>
          <%= f.text_field :square_feet %>
        
          <% fields_for @listing do |s| %>
            <%= s.hidden_field :id %>
            <%= s.text_field :asking_price %>
          <% end %>
        
          <%= f.submit %>
        <% end %>
        

        然后在你的控制器中你会做这样的事情:

        house = House.find(params[:id])
        house.update_attributes(params[:house])
        listing = Listing.find(params[:listing][:id])
        listing.update_attributes(params[:listing])
        

        这是为了更新,但你可以在那里做任何你想做的事情。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多