#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
первым.