【问题标题】:Form with dynamic number of items具有动态项目数的表单
【发布时间】:2010-03-05 05:05:30
【问题描述】:

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

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

所以模型看起来像: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 添加项目。


所以答案应该是:

  • 包括演示:
    • 正确绑定 post 值;
    • 正确验证所有项目;
  • 包括模型的相关部分。
  • 仅在必要时包括对控制器的更改。
  • (不需要 JavaScript)

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

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

谢谢,
德米特里。

【问题讨论】:

    标签: ruby-on-rails ruby validation dynamic-data forms


    【解决方案1】:

    没有直接回答问题,但这里有一些资料可以帮助您:

    个人笔记。您的问题表现为要求某人为您完成工作。如果我在时钟上,我很乐意发布一个答案来满足您的所有需求。

    【讨论】:

    • 托尼,我很抱歉给人一种我希望有人为我做这项工作的感觉。我没有这样的意图。我只是想避免对答案的可能猜测,而只是得到明确的猜测。这样的答案是你的。很明显,它确实提供了我期望的确切答案——railcasts 196(和 197)。非常感谢。
    猜你喜欢
    • 2019-11-24
    • 1970-01-01
    • 2020-10-29
    • 2011-08-20
    • 1970-01-01
    • 2020-06-21
    • 2020-07-11
    • 1970-01-01
    • 2015-01-04
    相关资源
    最近更新 更多