如何获取has_and_belongs_to_many关系的子集

时间:2013-05-26 22:40:38

标签: ruby-on-rails-3 has-and-belongs-to-many

在我的Rails 3.2应用中,我在has_and_belongs_to_many :notes上有Profile个关联。 Note上有一个类型 - “紧急”或“标准”。 (Note has_and_belongs_to_many :profiles。)

我希望能够执行profile.urgent_notes之类的操作,而无需在以下方法中构建它:

def urgent_notes
  urgent_notes = Array.new
  goals.each do |g|
    if g.type == "urgent"
      urgent_notes << g
    end
  end

  urgent_notes
end

通过添加另一个关联,有没有一种干净的方法呢?或者像范围这样的东西最好?

2 个答案:

答案 0 :(得分:1)

Note上的范围最佳。 范围:急,哪里(类型:'紧急')

然后你可以做profile.notes.urgent来获得紧急笔记。

答案 1 :(得分:1)

如果您不想使用范围,请在此处重写您的Profile方法:

def urgent_notes
  self.goals.map {|g| g.type == 'urgent'}
end

您无需创建新数组或任何内容。 Rails和Ruby可以为您完成所有这些工作。