具有动态项目数的表单

Dmy*_*iak 3 ruby forms validation ruby-on-rails dynamic-data

只考虑构建一个Order表单的最佳方法(从用户角度来看):

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

所以模型看起来像:User -1---*-Order-1---*- OrderItem-*--1-JobType.此外OrderItem的包括属性的数量,让我们说name, file.


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

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
Run Code Online (Sandbox Code Playgroud)

最有趣的是视图应该如何显示,以便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[]]][]' />
Run Code Online (Sandbox Code Playgroud)

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


所以答案应该是:

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

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

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

谢谢,
德米特里.

Ton*_*not 5

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

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

  • 托尼,我很抱歉让我觉得有人为我做的工作.我没有这样的意图.我只是想避免对答案进行可能的猜测,只是弄清楚.这样的答案是你的.很明显,它确实提供了我期望的准确答案 - 轨道广播196(和197).非常感谢. (2认同)