| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Ruby On Rails > Исправить ошибку |
| Автор: Лена 29.12.2009, 11:18 | ||||
В строке поиска ввожу наименование и нажимаю поиск. Контроллер поиска вглядит так:
Поиск срабатывает, но при переходе на другую страницу среди найденных товаров получаю: You have a nil object when you didn't expect it! You might have expected an instance of Array. The error occurred while evaluating nil.empty? Анализ показал, что чтобы код работал надо заккоментировать: #if param.empty? #redirect_to_index("Введите название товара") #end Есть ли возможность оставить провеку? Как переделать код в таком случае? Да и вообще мой код не корректен. Ведь есди пользователь переходит на вторую страницу в найденных товарах то и param уже получается пустой. Следовательно и поиск уже не правильно работает.
Т.е. допустим у меня 12 товаров на букву С Если я ввожу эту букву и нажимаю поиск я получаю две страницы. На первой 10 товаров на букву С. При переходе на вторую страницу я попадаю на первую страницу всего каталога. |
| Автор: source777 29.12.2009, 13:19 |
| используй blank? вместо empty? или (param.nil? || param.empty?) |
| Автор: Лена 29.12.2009, 13:46 | ||||||
Порльзователь в строке поиска ставит букву С и жмет поиск:
Допустим товаров 15 штук. Выполняется действие:
После выполнения действия пользователь видит страницу с первыми 10 товарами на букву С. Если пользователь захочет увидеть остальный 5 товаров на букву С, он жмет внизу переход на вторую страницу. Вместо того чтобы их увидеть, пользователь почему-то попадает назад в полный католг всех товаров. Плюс еще и видит не нужное ("Введите название товара") Допустим я убираю этот код вообще: if param.blank? redirect_to_index("Введите название товара") end Остается вопрос почему я не могу увидеть вторую страницу, а попадаю назад в каталог. Чтобы понять, что происходит можно зайти на мой сайт. Посмотреть сколько товаров в общем каталоге на букву С. Их 12. Ввожу букву С и жму поиск. Вижу две страницы. При переходе на вторую страницу меня кидает обратно в полный каталог. А в категориях работает нормально. Код в категориях такой:
Разница только в инициализации param... и вызов другой: <%= link_to 'Аминокислоты', :action => 'find_tovar_cat', :category=>'Аминокислоты'%> |
| Автор: source777 29.12.2009, 17:25 |
| Ссылки, генерируемые will_paginate, покажи. |
| Автор: Лена 29.12.2009, 17:36 |
Это общий поиск: <div class=pagination><%= will_paginate @tovary %></div> Это поиск по категориям: <div class=pagination><%= will_paginate @tovary2 %></div> Я так понимаю, то при переходе на вторую страницу param в строке поиска становить пустым и поэтому сюда при заходе на вторую страницу передается пустота: @tovary = Product.paginate :page => (page==0 ? 1 : page), :order => 'title', :per_page => 10, :conditions => ["title like ?", "#{param}%"] <- param пустой и поэтому выводиться весь каталог. Или в чем проблема? |
| Автор: source777 29.12.2009, 18:08 |
| Да не код, сами ссылки покажи, которые в результате выполнения этого кода получаются. |
| Автор: source777 29.12.2009, 20:30 | ||
Что это за хрень? У тебя у формы должен быть атрибут method, а не в action доп. параметр. Попробуй:
|
| Автор: Лена 29.12.2009, 21:32 | ||
Ничего не изменилось. Вводим букву С и жмем поиск. Первая страница нормальная все товары на букву С. Ссылка стала такой: http://maximumshop.msk.su/store/find_tovar?html%5Bmethod%5D=get При нажати на вторую страницу пагинатора снова отображается весь католог и ссылка такая: http://maximumshop.msk.su/store/find_tovar?page=2 |
| Автор: source777 29.12.2009, 21:51 | ||
ты до сих пор не обновила Rails?
|
| Автор: Лена 29.12.2009, 22:32 |
| Большое спасибо! <% form_tag ({:action => :find_tovar}, {:method => 'get'}) do %> заработало. У меня старая версия Ror заморожена в vendor. Я только обновила gem для установки нового пагинатора. Ошибка стала заметной только тогда, когда появилось несколько страниц пагинатора. Проект был практически закончен и я побоялась из-за отсутсвия опыта обновить в нем Rails т.к. предпологала большое кол-во ошибок в старом коде после обновления. Новый проект начну с самой последней версии rails. |
| Автор: source777 29.12.2009, 23:17 | ||
Т.е. поддерживать и развивать его ты не собираешься?
Ну так а как ты этот опыт собираешься приобретать? Раз уж ты изучила старую версию, то у тебя есть всего 2 пути: 1) обновить уже работающий проект до свежей версии RoR и уяснить различия, путём гугления по сообщениям возникнувших ошибок. 2) изучать новую версию RoR с нуля. |