ruby-on-rails - rails link_to 标记在 rails 中建立连接记录
问题描述
我正在尝试构建一个允许用户将产品添加到订单的表单。
到目前为止,我设置它的方式是用户将从 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} %>
我正确地接近这个吗?然后我需要能够将上面的字段添加到 ajax 帖子中,以便我可以使用相关值填充关联记录。
解决方案
我正确地接近这个吗?
我不知道'正确'。但是,我可以想象一些替代方案。
以下是一些草图:
一种选择:
此方法假定Order
已保存,以便您可以将 aProduct
与该订单相关联。也许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
,但我从不使用它。)
我怀疑还有其他人。或者也许是变化。
推荐阅读
- django - Django i18n:在模板中渲染模型字段时如何翻译无?
- php - PHP 使用 Curl 发布到自定义 API
- css - Flex-box 被拉长
- ruby-on-rails - rspec 使用 Mailer 测试失败
- python - 添加后删除实例
- java - 如何使用 Java 处理程序在 Hybris Backoffice 中为特定的 Base Store 隐藏 editorArea:section?
- visual-studio-code - vscode settings.json 按钮去哪了?
- javascript - 尽管 Angular 在本地工作正常,但在构建后不起作用
- oracle - 防止 Oracle 包在生产中执行
- python - Tkinter entry.get() 不更新 [Gurobi Python]