[英]Rails: has_many Active record query
我想知道您如何通过使用AR调用来模拟:has_many:。
最终,我试图找到属于站点的子类别,而不是顶级类别,这是查询当前给我的。
楷模:
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`
这将导致查询返回子类别。 有什么想法吗?
提前致谢,
贾斯汀
假设您在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呢?
最终,我不得不编写连接,因为我无法像创建关系时那样通常指定:source。
Category.joins("JOIN cat_sub_links ON cat_sub_links.subcategory_id=categories.id").where(: cat_sub_links => {:site_id => @site_ids})
如果有人有更好的解决方案,我将在几天之内将答案保留。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.