【发布时间】:2010-03-05 05:05:30
【问题描述】:
只是考虑构建订单表单的最佳方式(从用户角度):
- 允许添加多个项目。
- 每个项目都有名称、作业类型下拉菜单和文件上传。
- 用户可以添加或删除项目。
- 用户必须提供至少一项。
- 应验证所有项目(例如:名称、作业类型和文件是必需的)。
- 当他点击提交时,应创建一个包含所有项目的订单。
所以模型看起来像: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
最有趣的是视图应该是什么样子,以便 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