我有3个模型:帐户,讨论和标记(由is_taggable提供)
class Account
has_many :discussions
end
class Discussion
belongs_to :account
has_many :tags
is_taggable
end
我希望能够执行current_account.tags,列出帐户讨论中当前使用的所有标记。所以......
class Account
has_many :discussions
has_many :tags, :through => :discussions, :source => :taggings
end
注意:标记源是针对is_taggable用于将标记连接到可标记模型的连接表(讨论,在本例中为......)
离开这个HM的问题:通过这种方式,在不同的讨论中多次出现相同的标签将迫使它们在这种关联中出现相同的次数。所以,我认为“没问题,我会将这个关联分组到taggings表的tag_id上,所以每个标签只显示一次。
class Account
has_many :discussions
has_many :tags, :through => :discussions, :source => :taggings, :group => "taggings.tag_id"
end
这不起作用,进一步检查这个生成的SQL显示GROUP BY没有出现在SQL中。我的问题是,如何让它发挥作用?
我尝试过的其他一些事情:
提前感谢您的任何帮助,并为任何与iPad相关的拼写错误道歉。
答案 0 :(得分:1)
在标记上使用命名范围,例如:
scope :account, lambda { |account|
select('DISTINCT taggings.*').
join('discussions on discussions.id = taggings.discussion_id').
where("discussions.account_id = ?", account.id)
}
然后,只需将其称为:
Tags.account(current_account)
你会得到一个AR系列。您还可以向您的帐户模型添加一个方法,该方法仅使用self标记该范围,例如:
def tags.
Tags.account(self)
end