我想知道如何模拟a:has_many:通过使用AR调用。
最终,我试图找到属于网站的子类别,而不是顶级类别,这是查询当前给我的内容。
型号:
class Categories < AR
:has_many :subcategories, :through => :cat_subcat_links
:has_many :cat_subcat_links
end
链接模型:
class CatSubcatLinks < AR
:category_id
:subcategory_id
:site_id
end
目前,如果我想知道哪些类别属于我执行的特定网站:
Category.joins(:cat_subcat_links).where(:cat_subcat_links => {:site_id => 1})
返回的查询:
SELECT `categories`.* FROM `categories` INNER JOIN `cat_sub_links` ON `cat_sub_links`.`category_id` = `categories`.`id` WHERE `cat_sub_links`.`site_id` = 1
问题是
`cat_sub_links`.`category_id` = `categories`.`id`
我需要它说
`cat_sub_links`.`subcategory_id` = `categories`.`id`
这将导致查询返回子类别。想法?
先谢谢了,
贾斯汀
答案 0 :(得分:1)
假设您有site.rb
class Site < AR
has_many :cat_subcat_links
has_many :subcategories, :through => :cat_subcat_links
has_many :categories, :through => :cat_subcat_links
end
你不能这样做:
Site.find([your_site_id]).categories
此外:
Site.find([your_site_id]).subcategories
也只是一个想法;您确定使用acts_as_tree或awesome_nested_set而不是更好吗?
答案 1 :(得分:0)
最终,我必须编写连接,因为我无法指定:源代码,就像我通常会创建关系一样。
Category.joins("JOIN cat_sub_links ON cat_sub_links.subcategory_id=categories.id").where(: cat_sub_links => {:site_id => @site_ids})
如果有人有更优雅的解决方案,我会留下几天的答案。