Ruby on Rails 4.x,嵌套模型,最佳实践


当您

需要将它们粘贴到不同位置时,要求最佳实践在显示操作中列出嵌套属性。

我有两个模型:产品和产品详细信息,产品详细信息属于产品,产品has_many产品详细信息。在表单和嵌套渲染中,它就像一个魅力,没有问题(特别是在 Ryan 的 RailsCast 196/197 之后(谢谢 boet!

现在,我需要为我的产品发布视图。基本上,它只是商业中的产品。

所以在我的控制器中,我有常规的东西,比如

@product = Product.find ... 
@product_details = @product.product_details.build

在显示操作视图中时

=@product.title 
=@product.price
=@product.sku 
    -@product_details.each do |d|
=d.attribute1
=d.attribute2
... some other view details here.. 
    -@product_details.each do |d|
=d.attribute3
=d.attribute3

如您所见,我多次查看循环,因为我需要在各个地方显示它们。

我想知道什么是最佳实践(可能是数组在这里有意义),请建议。

我计划通过使用单选按钮和jQuery事件来扩展页面功能,以更改(即价格)和某些字段的值,最终会更改价格和订单详细信息。

获得

一些很好的阅读/专门针对嵌套模型及其属性的 rails + js 组合示例会很棒......另一件事是我计划围绕主要产品构建许多嵌套模型,并根据客户端行为显示它们/更新/编辑等。每个模型的嵌套模型数量是否有任何最佳实践?

我相信

你最终可能会找到这个 - 但只是为了修饰这个......

是的,您希望数组使用"render"命令传递给部分以保持其"DRY"。 这允许您按照 Ruby 方式以最小的麻烦重用您想要的所有部分中的字段......也检查有关视图的部分/布局的教程(链接)。 我从未读过高级模式书 - 去年情况可能发生了变化。 我知道有一群人随机建议将Cocoon与simpleForm一起使用,有时HAML也会出现以替换ruby的*.erb部分渲染。

你错过了他做的第二部分......对我非常有帮助的是#403:动态表单的额外更新。 具体来说,他要求按复选框的类型进行撕裂,这为您提供了一个加载复选框类型......这是动态部分加载...这就是如何在循环中最好地重复其中每一个的答案。

应用/视图/产品/_form.html.erb

  <%= f.fields_for :properties, OpenStruct.new(@product.properties) do |builder| %>
    <% @product.product_type.fields.each do |field| %>
      <%= render "products/fields/#{field.field_type}", field: field, f: builder %>
    <% end %>
  <% end %>

最新更新