Rails версии 6, postgresql v 11, ruby 2.7.0
Я борюсь со странным поведением при использовании ActiveRecord для заполнения таблицы HTML в просмотр на основе поля поиска, содержащегося в форме.
Если я запрашиваю базовый URL
localhost:3000/instui/search
, я получаю результаты, которые (правильно) содержат первые 20 записей из базы данных (ценные бумаги) из NYSE и NASDAQ):
Если я скажу BB в поле поиска, я могу увидеть, «где» выполнило свою работу и только что получил соответствующие записи из путов на консоль:
Processing by InstuiController#search as JS
Parameters: {"utf8"=>"✓", "q"=>"BB", "commit"=>"Search"}
{"utf8"=>"✓", "commit"=>"Search", "q"=>"BB"}
Instrument Load (1.1ms) SELECT "instruments".* FROM "instruments" WHERE (ticker LIKE '%BB%') LIMIT $1 [["LIMIT", 20]]
↳ app/controllers/instui_controller.rb:19:in `search'
Asia Broadband Inc
ABB Ltd
Auburn Bancorp Inc
AbraPlata Resource Corp
AB DISCOVERY VALUE FUND CLASS B
AbbVie Inc
Abby Inc
AB GROWTH FUND CLASS B
Ambu A/S
Mercantil Bank Holding Corporation
BAB Inc
BlackBerry Limited
New York Health Care Inc
NORTHERN GLOBAL TACTICAL ASSET ALLOCATION FUND NORTHERN GLOBAL TACTICAL ASSET ALLOCATION FUND
BBA Aviation plc
BBA Aviation plc
JPMorgan BetaBuilders Dev Asia ex-JpnETF
BBH LIMITED DURATION FUND CLASS I SHARES
Baker Boyer Bancorp
BlueBird Battery Metals Inc
20
Rendering instui/search.html.erb within layouts/application
Rendered instui/search.html.erb within layouts/application (Duration: 0.4ms | Allocations: 339)
Completed 200 OK in 15ms (Views: 11.8ms | ActiveRecord: 1.1ms | Allocations: 11355)
Однако представление продолжает отображать тот же результат из предыдущего запроса - то есть все записи, как будто представление не получило новый переменная экземпляра из контроллера. Я не вижу, где я иду не так. Помощь приветствуется.
Представление:
<h2>Search</h2>
<%= form_with(url: "search", method: "get") do %>
<%= label_tag(:q, "Search for:") %>
<%= text_field_tag(:q) %>
<%= submit_tag("Search") %>
<% end %>
<table class="table table-striped">
<tr><th>ID</th><th>Name</th><th>Country</th><th>Ticker</th>
<% @search_results.each do |i| %>
<tr>
<td><%= i.id %></td>
<td><%= i.name %></td>
<td><%= i.country %></td>
<td><%= i.ticker %></td>
</tr>
<% end %>
</table>
Контроллер:
class InstuiController < ApplicationController
def index
end
def search
@searchTerms = params.permit(:utf8, :commit, :q)
puts(@searchTerms)
query = @searchTerms[:q]
if query == nil
query = "%%"
end
@search_results = Instrument.where("ticker LIKE ?", "%#{query}%").limit(20)
@search_results.each { |i| puts(i.name) }
puts @search_results.length
end
end
маршруты :
Rails.application.routes.draw do
get 'test/index'
get 'instui/index'
get 'instui/search'
get 'assetmaster/csvlist'
resources :instruments
get 'instruments/csvlist'
get 'prices/priceservice'
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end