如何在Ruby on Rails中搜索对象数组?

时间:2010-08-06 14:15:00

标签: ruby-on-rails

这是Ruby on Rails中数据库的结构:

用户有很多笔记
笔记有很多种类 类别有很多笔记

我已经与has_many建立了这种关系:通过。我用

current_user.notes

获取属于用户的笔记。但是,获取属于当前用户的具有特定类别的注释的最佳方法是什么?我应该像在模型上一样使用find方法吗?谢谢你的阅读。

3 个答案:

答案 0 :(得分:0)

我认为应该是:

current_user.notes.all(:joins => :categories, :conditions => ["categories.name = ?", search_parameter])

请注意,这将使用INNER JOIN执行查询以使用LEFT JOIN,您应该使用:include

current_user.notes.all(:include => :categories, :conditions => ["categories.name = ?", search_parameter])

答案 1 :(得分:0)

class User < ActiveRecord::Base 
   has_many :notes  
   has_many :categories, :through => :notes 
end 

class Note < ActiveRecord::Base
  belongs_to :user
  belongs_to :category
end 

class Category < ActiveRecord::Base 
    has_many :notes  
end 

@ current_user.notes.all

我认为,你应该打破笔记和类别之间的多对多关系。

答案 2 :(得分:0)

你可以将一个named_scope添加到笔记

  named_scope :with_categories, 
              lambda{|cat|
                { 
                  :joins => [:categories],
                  :conditions => ["categories.id IN (?)", cat]
                }
              }

然后你可以简单地使用

current_user.notes.with_categories(1, 2)