首页 > 解决方案 > 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 帖子中,以便我可以使用相关值填充关联记录。

标签: ruby-on-railspostlink-toactive-form

解决方案


我正确地接近这个吗?

我不知道'正确'。但是,我可以想象一些替代方案。

以下是一些草图:

一种选择:

此方法假定Order已保存,以便您可以将 aProduct与该订单相关联。也许Order有一个status

  • 您可以将整个部分(产品、尺寸、数量)包装成自己的形式(不嵌入在您的订单中)。
  • 使用 js 提交表单remote: true(如果您使用的是 Rails 5,那么这可能是默认行为)。
  • 当用户单击“添加”时,您将收到字段值,parameterscontroller可以在其中将ProductOrder.
  • 然后,渲染一个可以插入 DOM 的 HTML blob(可能是一个订单行?)
  • 使用js插入blob并清除表单。

另外的选择:

  • 您可以将整个部分(产品、尺寸、数量)保留为不是表格,并将其置于您的表格之外
  • 将其全部包装在一个 div 中。
  • 将该链接转换为跨度或类似的东西。
  • 将一个.on 'click'事件(我假设为 jquery,您没有指定,所以我将使用它运行)附加到包装器。
  • 单击链接时,click事件将冒泡到包装器。
  • 让包装器通过 ajax 提交字段值。
  • 如上进行。

我不会真正推荐这种方法,因为在我看来,您基本上是在复制远程表单的功能。但是还有...

另一种选择

这种方法不需要已经存在Order

  • 您可以在表单之外有一个隐藏的订单项目行。
  • 您在另一个选项中如上所述构建您的页面。
  • 现在,当用户单击“添加”按钮时,克隆隐藏的订单项目行。
  • 使用适当的值填写克隆的订单项目。
  • 将克隆的订单项插入Order表单。
  • 当用户单击“订单”或“提交”或他们完成后单击的任何内容时,您将获得所有订单行作为字段集。
  • 连同表格一起处理订单行项目。(有些人可能会建议accepts_nested_attributes_for,但我从不使用它。)

我怀疑还有其他人。或者也许是变化。


推荐阅读