Простой поиск в ruby on rails

#ruby-on-rails #ruby-on-rails-3

#ruby-on-rails #ruby-on-rails-3

Вопрос:

Я пытаюсь выполнить довольно простой поиск. У меня есть search действие в моем контроллере:

 def search
      @tracker = Tracker.where(params[:search])
  end
  

И, на мой взгляд:

 <%= form_tag trackers_search_path, :method => 'get' do %>
  <p>
    <%= text_field_tag :search, params[:search] %>
    <%= submit_tag "Search", :name => nil %>
  </p>
<% end %>
  

Но он по-прежнему возвращает нулевые значения. Вот журнал:

 Parameters: {"utf8"=>"✓", "id"=>"search", "search"=>"1Xc9fc0e"}
  Tracker Load (0.2ms)  SELECT "trackers".* FROM "trackers" WHERE ("trackers"."token" = 'search') LIMIT 1
  

Мне кажется, это не передает право param в оператор select, но я не уверен, почему.

Комментарии:

1. Я должен упомянуть, что я уже пробовал Tracker.where(:token => params[:search]) .

Ответ №1:

Похоже, что маршрутизация может быть испорчена? Вы уверены, что search действие действительно вызывается? Похоже, что это происходит show с id search . Попробуйте добавить debugger вызов или Rails.logger.debug call, чтобы увидеть, какое действие вызывается. Или просто просмотрите всю запись в журнале.

Комментарии:

1. Хорошая идея! Это даже не приходило мне в голову, но имеет смысл.

2. Да, это то, что я начал понимать. Это мой маршрут: match "trackers/search" => 'trackers#index' поэтому я не могу понять, как он добирается до show

3. попробуйте поставить это перед resources :trackers , маршруты совпадают сверху вниз, выбирая первое совпадение, поэтому, если он увидит, /trackers/search оно будет совпадать trackers#show первым.