2009-11-23 76 views
2

我有一個有很多孩子(選擇)的模型。我需要顯示使用字段的子項,但我真的想根據每個選擇中的屬性使用group_by對它們進行分組。如何在rails中使用group_by與fields_for?

目前我使用

accepts_nested_attributes_for :selections, :allow_destroy => true 

所以我的形式看起來有點像這樣:

<% form_for @match do |form| %> 
    <% form.fields_for :selections do |child_form| %> 
    <%= child_form.object.first_name %> 
    <%= child_form.check_box '_delete' %> 
    <%= child_form.label '_delete', 'Remove' %> 
    <% end %> 
    <%= form.submit %> 
<% end %> 

不太清楚我怎麼會羣:使用GROUP_BY選擇。有什麼建議?

回答

2

這個問題有點含糊。我的解釋是,您希望按屬性顯示類似的選擇。有點像這樣:

  • 形式匹配
    • 形式的選擇與屬性選擇
      • 領域的一個
      • 領域可供選擇,屬性的
      • 領域可供選擇,屬性A
      • 用於屬性B選擇的字段
      • 領域可供選擇,屬性b
      • 領域可供選擇,屬性ç

的GROUP_BY運營商是不是你想要的。它會將符合條件的所有選擇縮寫爲單個條目。

更好的選擇是在填充選擇列表時使用訂單選項。甚至可能會更好地爲您指定該關聯中的順序。這將做你想要的而不用改變你的表格。

has_many :selections, :order => "attribute" 

但是,這會導致您匹配的所有選擇查詢按屬性排序。如果這是一個問題,您可以爲選擇添加第二個has_many關係。

has_many :selections 
has_many :grouped_selections, :class_name => "selection", :order => "attribute" 

accepts_nested_attributes_for :selections, :grouped_selections :allow_destroy => true 

而所有需要改變你的形式是<% form.fields_for :grouped_selections %>

0

我看到的唯一選擇是通過關聯對它們進行分組。在你的模型:

has_many :selections, :order => 'attribute DESC' 

這不是做最徹底的方法(這是怎樣的選擇會自動在應用程序的其餘部分進行排序,太),但它會工作。