【问题标题】:rails link_to tag to build join record in railsrails link_to 标记在 rails 中建立连接记录
【发布时间】:2018-05-02 23:05:07
【问题描述】:

我正在尝试构建一个允许用户将产品添加到订单的表单。

到目前为止,我的设置方式是用户将从 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 帖子中,以便我可以使用相关值填充关联记录。

【问题讨论】:

  • 有效吗?这将是您是否正确接近它的一个很好的指示。
  • 链接有效,但现在我尝试发布参数来构建相关记录,因为我必须查询数据库以获得正确的 FK

标签: ruby-on-rails post link-to active-form


【解决方案1】:

我的方法正确吗?

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

这里有一些草图:

一个选项:

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

  • 您可以将整个部分(产品、尺寸、数量)包装成自己的形式(未嵌入在您的订单中)。
  • 使用remote: true 让表单通过js 提交(如果您使用的是Rails 5,那么这可能是默认行为)。
  • 当用户单击“添加”时,您将在controller 中收到字段值parameters,您可以在其中将Product 与Order 关联起来。
  • 然后,返回一个可以插入 DOM 的 HTML blob(可能是一个订单行?)
  • 使用js插入blob并清除表单。

另一种选择:

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

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

另一种选择

这种方法不要求Order已经存在。

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

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

【讨论】:

  • 我所拥有的是一个嵌套表单。所以 - 客户填写姓名和信息(客户型号) 客户正在为订单挑选日期(订单型号) 客户然后从下拉列表中挑选他们想要的产品的项目、尺寸和数量。订单有很多line_items(OrderLineItem 模型)
  • 您的另一种选择方法似乎对我来说是最好的。基本上我希望在提交表单时创建所有内容。除了我错过了那些用于构建我的名称参数的 rails 属性助手(我猜你说你不使用它)。例如,如果我有一个用户尝试添加多个产品,我如何唯一标识?也许通过连接所有字段值来组成一些唯一的 id?最重要的是,由于我仍在学习 Rails,所以我想确保我在构建这种类型的模型时采用了正确的方法——或者这是你需要偏离轨道的部分?
猜你喜欢
  • 2011-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多