2012-07-27 37 views
0

我试图创建一个有点不同寻常的示波器。我有一个处理网站的应用程序。有一种叫做“网站”的模式,它有许多页面。网站模型有一个名为主页的列。每个网站的页面列表包含主页和其他页面(关于,定价,等等)。基于多个模型创建示波器

我想为页面模型创建两个范围。一个标识主页,另一个标识所有其他页面。我在想这样的事情。

my_homepage = Site.find_by_id(self.site_id).homepage 
scope :homepage, where(url: my_homepage) 
scope :additional_pages, where(url != my_homepage) 

不幸的是,这些不起作用。事实上,当我试图在控制台中与他们一起玩时,我不能。我得到这个错误。

(Object doesn't support #inspect) 

有没有更聪明的方法来做到这一点?

回答

1

试试这个:

scope :homepage, joins(:sites).where("sites.homepage = pages.url") 
scope :additional_pages, joins(:sites).where("sites.homepage <> pages.url") 
+0

有趣。我从来没有见过这样的范围。我调整你的代码来说“关节(:站点)”(单数),它的效果很好。一个问题:我注意到在我的additional_pages中,我出现了robots.txt文件。我想排除这些,但我不知道如何。我在additional_pages方法中附加'.where(“'robots.txt'<> pages.url [-10,10]”)',但没有运气。有什么建议么? (如果你喜欢,我可以在另一个StackOverflow文章中询问。) – 2012-07-27 19:00:50

+1

是的,最好创建另一个问题。 (并验证了我的答案:)) – Dougui 2012-07-27 19:08:26

+0

后续问题发布在这里:http://stackoverflow.com/questions/11694325/multiple-model-scope-with-multiple-where-statements – 2012-07-27 19:22:23