0

首先,题目。

我有三个模型,它们之间通过 has_many :trough 关联相互链接,如下所示:

#User model 

has_many :chars_del, :class_name => CharDelegated, :dependent => :destroy
has_many :chars, :through => :chars_del

#CharDelegated model
#has a field owner:integer

belongs_to :char
belongs_to :user

#Char model
#has fields name:string

has_many :chars_del, :class_name => CharDelegated
has_many :users, :through => :chars_del

我需要做的是我需要从用户记录中搜索以查找特定用户拥有的所有字符(:所有者字段为真)按名称排序。我已经坚持了几个小时了,所以我相信我可能会错过一个非常简单的答案......但到目前为止我尝试过的任何事情都没有奏效。

更新 发现了一些有用的东西:

user.chars.where(:char_delegateds => {:owner => 1}).order('name')

不知道为什么 :chars_del 给出了错误,但是完整的表名完成了这项工作。

安德鲁,你的答案也很好,而且在数据库上要快一点,比很多。

4

2 回答 2

0

user.chars.order('name')

不行?(给定user的是单个User实例。)

编辑

鉴于您的新信息:

CharDelegated.where(user_id: user.id, owner: true).map(&:char)

应该管用。

于 2012-03-04T18:16:10.950 回答
0

在您的特定示例中,您不需要搜索中间表,但如果您想查看如何使用连接表的示例并通过它搜索更复杂的场景,您可以这样做。

@char = Char.all(:include => :users, :conditions => ["char_delegated.user_id in (?)", user_id]).order('name')

于 2013-01-21T14:45:41.070 回答