提交同一对象的多种形式

时间:2014-03-15 18:51:50

标签: jquery ruby-on-rails ajax json

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

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

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>

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

我有兴趣知道我的实施是否也是如此。我确定其他人已经完成了这项工作,但可能采用不同的方式?

2 个答案:

答案 0 :(得分:0)

我猜你有一个GuestController,有两个方法:编辑和更新,你正在运行以更改访客对象。

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

编辑操作如下所示

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

其中&#39; edit_image&#39;是一个页面,其中包含更改个人资料照片的表单。

[:customparam]是我发现的东西,所以控制器动作可以识别用户按下哪个按钮。您可以向link_to添加自定义参数,如下所示:

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

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

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

答案 1 :(得分:0)

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

修改

宝石nested_form