我有一个带产品的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_type和:property。
上有一个属性“sequence”我想按顺序在这两个级别显示这些。我能想到的唯一方法是在模型中循环遍历它们,并将序列号放在哈希中,以便我可以对其进行排序。非常非常难看。
我知道我可以在has_many关系中添加一个“命令”,但这并不能解决来自我的多对多关系的属于我的belongs_to排序。
我认为我需要使用哈希的原因是因为我希望我的显示器是:
物业类型1 * **
*财产1:价值
*财产2:价值
*财产3:价值
物业类型2 * **
*财产4:价值
*财产5:价值
如果我遍历整个集合,我将获得我的属性类型的重复,除非我在那里放置一些丑陋的“先前值”和“当前值”比较。
答案 0 :(得分:0)
我有一些想法,不确定它们是否有用,而且我还在使用rails 2.3
创意1- 添加到您的模型 default_scope:order => '序列'
创意2 -
Product.find(:all,:include => {:product_properties => {:properties =>:property_type}},:order =>“products.sequence,property_types.sequence”)
注意:查询中的表可能不会被称为property_types,但是您可以查看日志并查看rails提供的别名。
最后的手段
a.sort_by {| a | a}
(无需创建哈希)
答案 1 :(得分:-1)
这是我最终做的事情。它是“: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 %>