搜索has_many:通过包括中间模型的关联

时间:2012-03-04 16:48:16

标签: ruby-on-rails-3 join model-associations

首先是主题。

我有三个模型,它们之间通过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给出了错误,但是完整的表名完成了这项工作。

安德鲁,你的答案也很有效,而且在数据库上的速度要快一点。

2 个答案:

答案 0 :(得分:0)

确实

user.chars.order('name')

不行吗? (给定user是一个User个实例。)

修改

鉴于您的新信息:

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

应该有用。

答案 1 :(得分:0)

在您的具体示例中,您不需要搜索中间表,但如果您想查看如何使用连接表并搜索更复杂场景的示例,则可以这样做。< / p>

@char = Char.all(:include =&gt;:users,:conditions =&gt; [“char_delegated.user_id in(?)”,user_id])。order('name')