我试图建立一个表单,允许用户将产品添加到订单。
我把它设置的方式,到目前为止是用户从2个下拉框选择并键入1个文本字段1 - 他们希望2的产品 - 它的大小3 - 他们想要的数量。
我希望做的是让用户单击一个标签的link_to这个项目“添加”到他们的订单。
我想我可以通过AJAX做到这一点,并建立关联记录在我的控制器,并将它呈现页面时,请求返回上。
当用户与他们的订单完成和命中提交我可以创造我的客户订单与他们希望购买的产品。
我是不是正确的处理这个?
例如,我的形式有以下几点:
<%= collection_select :order_line_item, :cake_id, Cake.order(:name), :id, :<%= grouped_collection_select :order_line_item, :cake_size_id, Cake.all, :cake_sizes, :name, :id, :name %>
<%= label_tag :quantity %>
<%= text_field_tag :quantity %>
<%= link_to "Add to order", add_to_order_path, {method: :post, remote: true} %>
我是不是正确的处理这个? 然后我需要能够添加字段上面阿贾克斯后,所以我可以填充相关值的关联记录。
我是不是正确的处理这个?
我不知道“正确”。 但是,我可以想像一些替代品。
下面是一些素描:
一个选项:
这种方法假定Order
已经保存,以便您可以将相关联Product
与秩序。 也许Order
有一个status
。
- 你可以换行全位(产品,规格,数量)在其自己的形式(没有嵌入您的订单中)。
- 有形式通过使用JS提交
remote: true
(如果你使用Rails 5,那么这可能是默认行为)。 - 当用户点击“添加”按钮,您将收到的字段值作为
parameters
在你的controller
,你可以在关联Product
与Order
。 - 然后,使背部可以插入到DOM中的HTML BLOB(也许顺序排?)
- 用JS插入BLOB和清除表单。
另外一个选项:
- 你可以离开这个全位(产品,规格,数量)不一种形式,有它存在的形式之外 。
- 在一个div总结了这一切。
- 转换该链接到一个跨度或类似的东西。
- 附加的
.on 'click'
事件(我假设的jQuery,你不指定,所以我要运行它)的包装。 - 当用户点击该链接时,
click
事件会冒泡的包装。 - 有包装通过AJAX提交的字段值。
- 如上继续。
我真的不会推荐这种方法,因为它在我看来,你基本上复制远程表单的功能。 但是还有...
另一种选择
这种方法不需要在Order
已经存在。
- 你可以有你的表单以外的隐藏的订单项目行。
- 您建造网页如上另一种选择 。
- 现在,当用户点击“添加”按钮,克隆隐藏的订单项目行。
- 填写适当的值克隆的订单项目。
- 插入克隆订单项目到您的
Order
形式。 - 当用户点击“订购”或“提交”或任何他们点击他们完成时,你会得到所有的命令行的字段设置。
- 处理与形式沿着命令条目。 (有些人可能会建议
accepts_nested_attributes_for
,但我从来没有使用。)
我怀疑还有其他的。 或许变化。