| Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум на Исходниках.RU > Ruby > избавится от множественных проверок |
| Автор: Cepheus 13.03.12, 05:23 |
| Здравствуйте, есть 2 таблицы category(id,titel,parent_id) pages(id,titel,category_id) нужно вывести на странице категории верхнего уровня(parent_id=nil), затем по переходу категории выводить под категории и страницы принадлежащие ей, в контроллере в методе list делаю <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> 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 соответственно во вьюхе нужно все это дело вывести приходится тоже делать всякие проверки, так как еще категории и страницы выводятся в разные таблицы, и если к примеру страниц не существует у категории, то и таблицу не выводить, уж оч много проверок всяких как тут можно это все оптимизировать. Ух как описал=)))) |
| Автор: LeXuS 24.03.12, 21:50 |
| Какой ужас%) Почитай доку по поводу того что такое has_many, belongs_to и т.д. |
| Автор: Мохнатый 28.03.12, 06:37 |
И что я сюда зашел |
| Автор: deil 03.04.12, 13:30 |
| <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> def list @categories = Category.all :conditions => {:category_id => params[:category_id] } @pages = Page.all :conditions => {:category_id => params[:category_id] } end Не? |
| Автор: LeXuS 03.04.12, 17:44 |
| deil, Ней смей так делать никогда:) Да и не в тему) Подскажу по теме: Используй гем https://github.com/collectiveidea/awesome_nested_set |
| Автор: Cepheus 13.04.12, 09:33 |
| LeXuS и причем тут has_many, belongs_to, это связи, а мне нужно выводить полученный результат |
| Автор: LeXuS 14.04.12, 08:51 |
| Цитата Cepheus @ LeXuS и причем тут has_many, belongs_to, это связи, а мне нужно выводить полученный результат Ага=) Именно связи:) Почитай как реализовать вывод если связать так |
| Автор: Cepheus 16.04.12, 04:55 |
| да тут в другом вопрос(хотя про связи не отрицаю, может и имеют место быть тут, хотя и так все связанно), тут такое дело есть категории есть страницы, категории имеют вложенные категории, как обычно id через params приходит, категории имеют страницы, но могу и не иметь. вот и получается такой алгоритм 1. если params =nil то вывести категории верхнего уровня, и посмотреть имеет ли он страницы если да то вывести эти страницы 2. если params!=nil то вывести категории с parent_id=params[:id] и так-же вывести страницы если имеются вот и получается что и в контроллере и во вьюхе есть по пару проверок, хоть это и не много но как-то взгляр режет=) |
| Автор: Romtek 19.04.12, 08:10 |
| Цитата Cepheus @ <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> 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 отпадают. Я не знаю каким именно образом отображаются элементы на экране, поэтому возможны дополнительные изменения. Может даже и как такие: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> @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 |