【问题标题】:Submitting multiple forms of the same object提交同一对象的多个表单
【发布时间】:2014-03-15 18:51:49
【问题描述】:

我有一个表格,要求提供“客人”对象的基本信息,基本上是:姓名、电话、电子邮件。我还有一个允许用户“添加更多客人”的按钮,它基本上复制了使用 jQuery 的原始表单。当用户单击提交按钮时,我希望将他们在页面中添加的所有客人提交给控制器进行创建。我正在努力找出最合适的方式来处理这样的提交。

1 - 我应该以不同的形式提交多个(相同类型的)对象吗?实际上,我现在使用一个表单提交工作,并确保每个访客属性字段名称都是唯一的(first_name_1、first_name_2 等)。虽然这有效,但感觉非常“hacky”。我觉得将每位客人分成自己的形式更干净。将所有内容都放在一个表单中要求我跟踪每位客人可以提交多少个属性,如果由于某种原因他们没有按预期的属性数提交,我就会出错。

2 - 我应该使用 jQuery + ajax 来提交吗?我对 JSON 了解不多,但是用它来做这个有意义吗?

我基本上是在为这种情况寻找最佳实践。我想如果我知道最合适的处理方式,我可能会在某处找到语法。

应用程序后端是 rails。如果需要,我可以提供更多信息。

谢谢!


标记见下文:

<div id=guests>
    <div id="guest1" class="guest">
        <form name="contact" class="form-horizontal bs-form" action=" " class="contact">
            <fieldset>
                <input required type="text" class="input-medium required" name="first_name_1" id="first_name_1" placeholder="First Name*" autocorrect="off" autocapitalization="on">
                <input required type="text" class="input-medium required" name="last_name_1" id="last_name_1" placeholder="Last Name*" autocorrect="off" autocapitalization="on">
                <input type="text" class="input-medium" name="phone_number" id="phone_number_1" placeholder="Phone Number" autocorrect="off">
                <input type="text" class="input-medium" name="email" id="email_1" placeholder="Email" autocorrect="off">
                <select class="host" name="host_1" id="host_1">
                    <option value="false" selected>Not table host</option>
                    <option value="true">Table host</option>
                </select>
            </fieldset>
        </form>
    </div>
</div>
<a href="#" class="add btn btn-info">Add Another Guest</a>

<div class="form-actions">
    <button type="submit" class="btn btn-primary btn-previous" id="addguestsubmit">Submit</button>
</div>

这里的a fiddle 显示了标记和 jquery 执行表单创建/删除。正如我在下面的 cmets 中提到的,我不是在处理嵌套属性,而是在处理相同模型的具有相同字段的未知数量的表单。

我很想知道我的实现是否也关闭了。我确信其他人已经做到了这一点,但可能以不同的方式?

【问题讨论】:

    标签: jquery ruby-on-rails ajax json


    【解决方案1】:

    我猜你在某个地方有一个 GuestController,它有两种方法:编辑和更新,你正在运行它来更改来宾对象。

    我在我的应用程序上遇到了相同的 pb,我以这种方式解决了它:edit 方法可以处理多个表单,这些表单都由相同的更新操作处理。我认为它回答了你问题的第一部分。

    编辑动作如下所示

    def edit
    
     @user = User.find(params[:id])
     if  params[:customparam] == "edit_image"
      render 'edit_image'
     elsif  params[:customparam] == "edit_annonce"
      render 'edit_annonce'
     elsif  params[:customparam] == "edit_informations"
      render 'edit_informations'
     end
    
    end
    

    其中“edit_image”是一个页面,其中包含用于更改个人资料图片的表单。

    [:customparam] 是我发现的,因此控制器操作可以识别用户按下了哪个按钮。您可以将自定义参数添加到 link_to,如下所示:

    <%= link_to "Change image", edit_user_path(:user_id => current_user.id, customparam: "edit_image")"%>
    

    因此控制器识别按钮“edit_image”,并呈现正确的形式。所有表单都提交给更新操作,更新操作会更改用户对象。

    我对第二部分没有明显的想法,对象数量不确定。

    【讨论】:

      【解决方案2】:

      这是 Railscasts 的一集 #196 Nested Model Form,教程是一个简单的问答应用程序,它向您展示了如何在 question 中添加多个答案 >问题表格。类似于您想同时保存多个客人。看看它是否有帮助。还有一个part 2

      编辑:

      宝石nested_form

      【讨论】:

      • 我承认我还没有看过rails cast,但是这种方法是否依赖于知道将向用户呈现多少表单?在我的情况下,用户可以决定他们将提交多少,我没有任何东西可以让我确定一个人可以拥有多少客人。
      • 如果您查看第 2 部分,他将展示如何添加多个答案而不是固定数字。还有一个叫做 nested_form 的 gem,看看你可以使用它。我将其添加到答案中。
      • 另一个类似nested_form的gem是Cocoon
      • 我看了铁轨铸件并检查了两颗宝石。我可能会错过它,但我不知道它们是否适用于我的情况。我不是在处理嵌套属性。所有提交的表单都将具有相同的模型类型(来宾)并具有相同的属性。如果有帮助,这是我的标记 + jquery 的小提琴:jsfiddle.net/jrmce/GCBhL
      猜你喜欢
      • 1970-01-01
      • 2021-10-01
      • 1970-01-01
      • 2014-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多