ActiveRecord, где результаты некорректны при визуализации в представлении - PullRequest
2 голосов
/ 14 февраля 2020

Rails версии 6, postgresql v 11, ruby 2.7.0

Я борюсь со странным поведением при использовании ActiveRecord для заполнения таблицы HTML в просмотр на основе поля поиска, содержащегося в форме.

Если я запрашиваю базовый URL

localhost:3000/instui/search

, я получаю результаты, которые (правильно) содержат первые 20 записей из базы данных (ценные бумаги) из NYSE и NASDAQ):

enter image description here

Если я скажу 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)

Однако представление продолжает отображать тот же результат из предыдущего запроса - то есть все записи, как будто представление не получило новый переменная экземпляра из контроллера. Я не вижу, где я иду не так. Помощь приветствуется.

enter image description here

Представление:

<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

1 Ответ

2 голосов
/ 14 февраля 2020

ОК, поэтому проблема в том, что я не установил local: true в форме. Форма переписывается так:

<%= form_with(url: "search", method: "get", local: true) do %>
<%= label_tag(:q, "Search for:") %>
<%= text_field_tag(:q) %>
<%= submit_tag("Search") %>
<% end %>

И проблема исчезает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...