Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск в базе 
V
    Опции темы
Лена
Дата 21.9.2009, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 16.8.2006

Репутация: нет
Всего: 11



Научите, пожалуйста, как организовать поиск в базе.
Думаю, что надо делать примерно так:
Код

<% form_tag :action => :find_tovar do  %>
  <label for ="title">Поиск:</label><br/>
  <%= text_field_tag :title, '', :size=>15 %>
  <%= submit_tag "Найти" %>
 <% end %>


В контролере:

Код

def find_tovar
    param = params[:title] 
    @tovary = Product.find(:all, :conditions => ["title like ?", "#{param}%"])
     if @tovary.empty?
       redirect_to_index("Указанного товара нет") 
     end
end


Создала представление find_tovar. 
Захожу на страницу. Ничего не ввожу в поле, жму кнопку "Найти" и попадаю в представление find_tovar. По идеи должно срабатывать redirect_to_index...
Подскажите, пожалуйста, как правильно все же передать значение из поля в метод find_tovar
?
PM MAIL   Вверх
source777
Дата 21.9.2009, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 12
Всего: 56



Цитата(Лена @  21.9.2009,  20:36 Найти цитируемый пост)
Захожу на страницу. Ничего не ввожу в поле, жму кнопку "Найти" и попадаю в представление find_tovar. По идеи должно срабатывать redirect_to_index...

Лена, а тебе не кажется что при пустом params[:title] будет выполнен запрос:
Код

SELECT * FROM products WHERE title LIKE '%'

?

А сей запрос вернёт все имеющиеся продукты, так что всё у тебя работает. Поздравляю.

P.S. Кстати очень рекомендую воспользоваться отличным готовым решением для поиска средствами СУБД: SearchLogic.


С ним твой метод будет примерно таким:
Код

def find_tova
    @tovary = Product.title_like(params[:title])
    redirect_to_index("Указанного товара нет")  if @tovary.empty?
end


хотя лучше бы

Код

def find_products
    @products = Product.title_like(params[:title])
    redirect_to_index("Указанного товара нет")  if @products.empty?
end




Это сообщение отредактировал(а) source777 - 21.9.2009, 22:51


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Лена
Дата 21.9.2009, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 16.8.2006

Репутация: нет
Всего: 11



Большое спасибо за рекомендацию и помощь! smile 
Без searchlogic теперь у меня пока новый вариант. Похоже, что работает. smile 
Код

def find_tovar
    param = params[:title] 
    if param.empty?
      redirect_to_index("Введите название товара")
    end
    @tovary = Product.find(:all, :conditions => ["title like ?", "#{param}%"])
     if @tovary.empty?
       redirect_to_index("Указанного товара нет") 
     end
    
end





Это сообщение отредактировал(а) Лена - 21.9.2009, 23:31
PM MAIL   Вверх
source777
Дата 23.9.2009, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 12
Всего: 56



Всегда пожалуйста.
Но всё-таки рекомендую обратить внимание на SearchLogic, в более сложных случаях он здорово упрощает код.

Цитата(Лена @  21.9.2009,  23:28 Найти цитируемый пост)
    if param.empty?
      redirect_to_index("Введите название товара")
    end

Лучше if param.blank? 
чтобы предусмотреть случай отсутствия params[:title] и как следствие param == nil.



--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Лена
Дата 24.9.2009, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 16.8.2006

Репутация: нет
Всего: 11



Цитата(source777 @  23.9.2009,  19:11 Найти цитируемый пост)
чтобы предусмотреть случай отсутствия params[:title] и как следствие param == nil.


Мне это не совсем понятно. Как может отсуствовать params[:title]? Мы же здесь инициализируем:
<%= text_field_tag :title, '', :size=>15 %>

PM MAIL   Вверх
source777
Дата 24.9.2009, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 12
Всего: 56



Цитата(Лена @  24.9.2009,  17:19 Найти цитируемый пост)
Как может отсуствовать params[:title]? 

Легко:
1) пользователь совершает поиск
2) происходит POST-запрос к твоему приложению
3) пользователь видит результат поиска
4) пользователь сохраняет страницу с результатами поиска в закладки
5) пользователь отрывает страницу из закладок
6) пользователь видит 500-ую ошибку сервера


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Лена
Дата 26.9.2009, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 16.8.2006

Репутация: нет
Всего: 11



Спасибо. Теперь понятно. smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby on Rails"
source777
  • С чего начать? начинаем
  • Документацию смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby On Rails | Следующая тема »


 




[ Время генерации скрипта: 0.0454 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.