排序关联

时间:2011-08-03 12:19:42

标签: ruby-on-rails

我的问题是 - 如何在此视图中对代码应用订单? Tag.rb中的“default_scope”在这里不起作用。

查看

<% @skills.each do |s| %>      
  <ul>
    <% s.active_positions.collect{|p| p.tags}.flatten.uniq.each do |tag| %>
    <li><%= link_to tag.name, s %></li>
    <% end %>
  </ul>
<% end %>

控制器

@skills = Skill.includes(:active_positions => :tags)

模型

class Skill
  has_many :tags
  has_many :positions
  has_many :active_positions, :class_name => "Position", :conditions => {:hidden => false}
end

class Position
  belongs_to :skill
  has_and_belongs_to_many :tags
end

class Tag
  belongs_to :skill
  has_and_belongs_to_many :positions  
  default_scope :order => "sequence ASC"
end

在视图中......

<% s.active_positions.collect{|p| p.tags}.flatten.uniq.sort_by{|tag|tag.sequence}.each do |tag| %>

1 个答案:

答案 0 :(得分:1)

您可以使用sort对数组进行排序!和/或sort_by!您可以像这样传递一个块:

@something.to_a.sort_by!{ |entry| entry.attribute }.each ...

在你的情况下,这应该是这样的:

<% s.active_positions.collect{|p| p.tags}.flatten.uniq.sort_by{ |tag| tag.name }.each do |tag| %>