
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.14.88] |
![]() |
|
Сообщ.
#1
,
|
|
|
Здравствуйте,
есть 2 таблицы category(id,titel,parent_id) pages(id,titel,category_id) нужно вывести на странице категории верхнего уровня(parent_id=nil), затем по переходу категории выводить под категории и страницы принадлежащие ей, в контроллере в методе list делаю ![]() ![]() def list if params[:category]==nil @top_cat= Category.find_all_by_parent_id(nil) end if params[:category]!=nil @cat = Category.find_all_by_parent_id(params[:category]) @pages = Pages.find_all_by_category_id(params[:category]) end end соответственно во вьюхе нужно все это дело вывести приходится тоже делать всякие проверки, так как еще категории и страницы выводятся в разные таблицы, и если к примеру страниц не существует у категории, то и таблицу не выводить, уж оч много проверок всяких как тут можно это все оптимизировать. Ух как описал=)))) |
Сообщ.
#2
,
|
|
|
Какой ужас%)
Почитай доку по поводу того что такое has_many, belongs_to и т.д. |
Сообщ.
#3
,
|
|
|
И что я сюда зашел
![]() |
Сообщ.
#4
,
|
|
|
![]() ![]() def list @categories = Category.all :conditions => {:category_id => params[:category_id] } @pages = Page.all :conditions => {:category_id => params[:category_id] } end Не? |
Сообщ.
#5
,
|
|
|
deil,
Ней смей так делать никогда:) Да и не в тему) Подскажу по теме: Используй гем https://github.com/collectiveidea/awesome_nested_set |
Сообщ.
#6
,
|
|
|
LeXuS и причем тут has_many, belongs_to, это связи, а мне нужно выводить полученный результат
|
Сообщ.
#7
,
|
|
|
Цитата Cepheus @ LeXuS и причем тут has_many, belongs_to, это связи, а мне нужно выводить полученный результат Ага=) Именно связи:) Почитай как реализовать вывод если связать так ![]() |
Сообщ.
#8
,
|
|
|
Цитата LeXuS @ Ага=) Именно связи Почитай как реализовать вывод если связать так да тут в другом вопрос(хотя про связи не отрицаю, может и имеют место быть тут, хотя и так все связанно), тут такое дело есть категории есть страницы, категории имеют вложенные категории, как обычно id через params приходит, категории имеют страницы, но могу и не иметь. вот и получается такой алгоритм 1. если params =nil то вывести категории верхнего уровня, и посмотреть имеет ли он страницы если да то вывести эти страницы 2. если params!=nil то вывести категории с parent_id=params[:id] и так-же вывести страницы если имеются вот и получается что и в контроллере и во вьюхе есть по пару проверок, хоть это и не много но как-то взгляр режет=) |
![]() |
Сообщ.
#9
,
|
|
Цитата Cepheus @ ![]() ![]() def list if params[:category]==nil @top_cat= Category.find_all_by_parent_id(nil) end if params[:category]!=nil @cat = Category.find_all_by_parent_id(params[:category]) @pages = Pages.find_all_by_category_id(params[:category]) end end Первое, что бросается в глаза, так это излишняя проверка очевидного условия: Если params[:category] сравнивается с null, то второй раз делать это бессмысленно, так как есть оператор else, который выберет оставшиеся варианты. Исходя из описания задачи я понял, что отображаем страницы только для подкатегории, не включая вложенных подкатегорий. Поэтому nested sets отпадают. Я не знаю каким именно образом отображаются элементы на экране, поэтому возможны дополнительные изменения. Может даже и как такие: ![]() ![]() @cat = Category.all(:conditions => { :parent_id => params[:category] }) # выступает в роли подкатегорий данной категории или топ-категорий if params[:category] # проверяем наличие параметра (под)категории @current_cat = Category.find(params[:category]) # находим заданную (под)категорию if @current_cat.pages.count > 0 # имеются ли в ней страницы @pages = @current_cat.pages.all # страницы в данной подкатегории else @current_cat = nil @pages = [] end else @pages = [] end |