呈现表单后茧构建资源
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 调用构建表单,然后渲染并继续。
这很笼统,但可能有助于解决问题。
我有一张账单表格。打开后,我选择一个供应商来显示该供应商的未结采购订单列表。选择采购订单应获取采购订单中订购的所有项目,并将它们显示为帐单中的行项目。
当表单已经呈现并且我已经看到嵌套属性和 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 调用构建表单,然后渲染并继续。
这很笼统,但可能有助于解决问题。