2012-07-27 4 views
0

Я пытаюсь создать область, которая немного отличается от обычной. У меня есть приложение, которое занимается веб-сайтами. Существует модель под названием «сайты», на которой есть несколько страниц. В модели сайтов есть столбец с именем homepage. Список страниц для каждого сайта содержит домашнюю страницу и дополнительные страницы (о ценах и т. Д.).Создание областей на основе нескольких моделей

Я хотел бы создать две области для модели страниц. Один идентифицирует домашнюю страницу, а другой идентифицирует все дополнительные страницы. Я думал о чем-то подобном.

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

Интересно. Я никогда не видел такой возможности. Я скорректировал ваш код, чтобы сказать «суставы (: сайт)» (единственное), и он отлично работает. Один вопрос: я заметил, что среди моих дополнительных_файлов у меня появились файлы robots.txt. Я хочу исключить их, но я не уверен, как это сделать. Я добавил '.where (" 'robots.txt' <> pages.url [-10,10] ")' к методу дополнительных_страниц, но не повезло. Какие-либо предложения? (Я могу спросить в другом сообщении StackOverflow, если хотите.) –

+1

Да, лучше создать другой вопрос. (И подтвердите свой ответ :)) – Dougui

+0

Последующий вопрос размещен здесь: http://stackoverflow.com/questions/11694325/multiple-model-scope-with-multiple-where-statements –

Смежные вопросы