Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails在视图中迭代多步骤关联的方式是什么?_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails Rails在视图中迭代多步骤关联的方式是什么?

Ruby on rails Rails在视图中迭代多步骤关联的方式是什么?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我有一个Rails 3项目和产品 :product has_many :product_properties :product has_many :properties, :through => :product_properties :product_property belongs_to :product :product_property belongs_to :property :property has_many :product_properties :property b

我有一个Rails 3项目和产品

:product has_many :product_properties
:product has_many :properties, :through => :product_properties

:product_property belongs_to :product
:product_property belongs_to :property

:property has_many :product_properties
:property belongs_to :property_type
在:property\u type和:property上有一个属性“sequence”

我想在这两个级别上按顺序显示它们。我能想到的唯一方法是在模型中循环遍历它们中的每一个,并将序列号放入散列中,这样我就可以对其进行排序。非常非常难看

我知道我可以在has\u many relationships上添加一个“order”,但这并不能解决我从多对多关系中得到的归属排序问题

我认为我需要使用散列的原因是因为我希望我的显示是:

属性类型1***
*属性1:值
*属性2:值
*财产3:价值

属性类型2***
*属性4:值
*财产5:价值


如果我在整个集合中循环,我将得到我的属性类型的副本,除非我在其中放入一些丑陋的“以前的值”和“当前值”比较。

我有一些想法,不确定它们是否有效,而且我仍然使用rails 2.3

想法1- 添加到您的模型中 默认范围:order=>“sequence”

想法2-

Product.find(:all,:include=>{:Product\u properties=>{:properties=>:property\u type}},:order=>“products.sequence,property\u types.sequence”)

注意:该表在查询中可能不被称为property_类型,但您可以查看日志,看看rails提供了什么样的别名

万不得已

a、 按{a{a}排序


(无需创建散列)

以下是我最后要做的事情。它是“:has_many,:through”关系和AREL的组合,它允许我以一种漂亮的方式显示嵌套关系,而无需大量代码

<% for pt in PropertyType.where("name not in ('Interchanges','Description')").order(:name) %>
    <% next unless pt.product_properties.where(:product_id => @product.id).first %>
    <h2><%= pt.name %></h2>
    <p>
        <% for pp in @product.product_properties.includes(:property).order("properties.name") %>
            <%= pp.property.name %>: <%= pp.value %><br />
        <% end %>
    </p>
<% end %>

@product.id)。第一个%>

:


我编辑了这篇文章。我需要散列的原因是因为我有一个非常详细的集合,但我想像上面列出的那样分块显示。
PropertyType.where
调用属于模型,而不是视图。Rails是一个MVC框架: