呈现表单后茧构建资源

cocoon building resources after form is rendered

我有一张账单表格。打开后,我选择一个供应商来显示该供应商的未结采购订单列表。选择采购订单应获取采购订单中订购的所有项目,并将它们显示为帐单中的行项目。

当表单已经呈现并且我已经看到嵌套属性和 link 在表单上添加或删除等时如何实现?

我当前的实现是使用 cocoon 的简单嵌套资源。

<%= simple_form_for(@bill) do |f| %>
  <%= f.error_notification %>
  <div class="form-inputs">
    <%= f.input :vendor_id, as: :select do %>
      <%= f.grouped_collection_select :vendor_id, Warehouse.ordered, :vendors, :name, :id, :name, include_blank: true %>
    <% end %>
  </div>
  <div id="items">
    <div id="ingredient_purchase" class="row">
      <div class="row">
        <%= f.simple_fields_for :warehouse_ingredient_purchase_logs do |warehouse_ingredient_purchase_log| %>
        <%= render 'warehouse_ingredient_purchase_log_fields', :f => warehouse_ingredient_purchase_log %>
        <% end #f.simple_fields_for %>
        <div class="links">
          <%= link_to_add_association 'Add More', f, :warehouse_ingredient_purchase_logs %>
        </div>
      </div>
    </div>
  </div>
  <div class="form-actions">
    <%= f.button :submit %>
  </div>
<% end #simple_form_for(@bill) do |f| %>
<!-- Modal Structure -->
<div id="modal1" class="modal bottom-sheet">
  <div class="modal-content">
    <h4>Purchase Orders</h4>
    <div class="purchase_orders_data"></div>
  </div>
</div>

您可以使用 ajax

完成此操作

当您 select 其中一项时,您需要对后端服务器执行异步调用。页面不刷新异步调用。

您可以使用 button_to or link_to 帮助程序触发此操作,然后配置路由以触发您的操作(或仅使用模型对象自动生成路由)并在您的操作中获取这些供应商账单:

def action
   @vendor = Vendor.find(params[:id])
   @bills = @vendor.bills
   respond_to do |format|
      format.js
   end
end

在你的js文件中action.js.erb你可以写js逻辑来修改你的表单

供应商账单也可以包含在部分 _object.html.erb 中,并且 action.js.erb 可以使用

将该部分附加到页面
$("<%= escape_javascript(render @object) %>").appendTo("#yourHtmlId");

因此,与其先渲染表单然后尝试使用 javascript 修改它,不如 我会首先收集参数:供应商和一个或多个采购订单,并使用该数据构建账单,然后显示出来。

如何实际执行此操作(使用 html 或 ajax/xhr)取决于您,但是当您知道应该如何构建时,有效地等待构建账单表格。

可能的方法:

  • 打开账单创建屏幕,显示供应商列表,显示模态,然后 post 并创建账单,然后重定向以进行编辑(很简单,但账单已经创建,也许您不希望这样),
  • 打开账单创建屏幕,控制器没有参数,因此:显示供应商列表,显示模态,然后再次获取账单创建屏幕,但使用给定参数(供应商 + 账单)并显示正确的创建表单新法案;
  • 打开账单创建,显示供应商列表,打开模式,选择后 ajax/xhr 调用构建表单,然后渲染并继续。

这很笼统,但可能有助于解决问题。