具有动态项目数的表单

时间:2010-03-05 05:05:31

标签: ruby-on-rails ruby validation dynamic-data html-form

只考虑构建订单表单的最佳方式(从用户角度来看):

  • 允许添加多个项目。
  • 每个项目都有名称,作业类型下拉列表和文件上传。
  • 用户可以添加或删除项目。
  • 用户必须提供至少一个项目。
  • 应验证所有项目(例如:名称,作业类型和文件是必需的)。
  • 当他点击提交时,应该创建一个包含其中所有项目的订单。

所以模型看起来像是:User -1---*-Order-1---*- OrderItem-*--1-JobType。此外,OrderItem包含多个属性,例如namefile


现在我想拥有尽可能瘦的控制器。使用“标准”代码更好:

class OrdersController < ApplicationController
  def create
    @order = Order.new(params[:order])
    if @order.save
      redirect_to account_url
    else
      flash.now[:error] = "Could not save Order"
      render :action => "new"
    end
  end
end

最有趣的是视图应如何显示,以便rails自动绑定发布到正确对象的所有值

现在我不担心JavaScript的退化,而是担心要添加的项目的模板,并将所有这些与验证相关联(可能是部分)。

我希望模板看起来像下面的模板,但不确定。

<input type='text' name='order[order_items[name[]]][]' />
<select name='order[order_items[job_type[]]][]'>...</select>
<input type='file' name='order[order_items[file[]]][]' />

我必须克隆此模板才能使用JS添加项目。


所以答案应该是:

  • 包含展示的视图或部分视图:
    • 正确绑定帖子值;
    • 正确验证所有项目;
  • 包括模型的相关部分。
  • 包含对控制器IF的更改,仅在必要时包含。
  • (不需要JavaScript)

理想情况下,我想看一个样本,如果有人知道一个(可能在GitHub上的某个地方)。

最后一点,,请在发布前检查您的解决方案。

谢谢,
德米特里。

1 个答案:

答案 0 :(得分:5)

没有直接回答这个问题,但这里有一些消息来源:

在个人笔记上。你的问题是要求别人为你做你的工作。如果我在时间,我很乐意发布一个答案,以满足您的所有需求。