Fairly new rails developer, and still trying to get my head around where things go and how to connect them.
I have a database of 'records', and am looking to search them. I found the ransack gem, which does this, however I don't want to put the search on the index page, I want a seperate page for the search and it's results.
I created a new action in the records controller:
def search
@q = Record.ransack(params[:q])
@found_records = @q.result(distinct: true)
end
and then the search.html.erb view, then the route:
resources :records do
match :search, to: 'records#search', on: :collection, via: [:get, :post]
end
and then the view itself
<%= search_form_for(
@q,
url: search_records_path,
html: { method: :post }
) do |f| %>
<%= f.label :brief %>
<%= f.search_field :brief %>
<%= f.submit %>
<% end %>
<div id="records">
<% @found_records.each do |record| %>
<%= render record %>
<% end %>
</div>
and this runs without errors, but when I press the search box the page just refreshes, with no search performed.
I guess this is a routing issue, but now sure how to set the route used by the search button? Any advice here much appreciated!
--edit The log looks good to me, here is what is logged on the console.
Started POST "/records/search" for 127.0.0.1 at 2022-08-09 05:35:52 +0800
Processing by RecordsController#search as HTML
Parameters: {"authenticity_token"=>"[FILTERED]", "q"=>{"brief"=>"rain"}, "commit"=>"Search"}
Rendering layout layouts/application.html.erb
Rendering records/search.html.erb within layouts/application
Record Load (0.1ms) SELECT DISTINCT "records".* FROM "records"
↳ app/views/records/search.html.erb:20
Rendered records/_record.html.erb (Duration: 0.1ms | Allocations: 49)
Rendered records/_record.html.erb (Duration: 0.1ms | Allocations: 47)
Rendered records/_record.html.erb (Duration: 0.1ms | Allocations: 48)
Rendered records/_record.html.erb (Duration: 0.1ms | Allocations: 47)
Rendered records/_record.html.erb (Duration: 0.1ms | Allocations: 49)
Rendered records/search.html.erb within layouts/application (Duration: 4.5ms | Allocations: 1984)
Rendered layouts/_shim.html.erb (Duration: 0.1ms | Allocations: 15)
Rendered layouts/_header.html.erb (Duration: 0.1ms | Allocations: 15)
Rendered layouts/_footer.html.erb (Duration: 0.1ms | Allocations: 15)
Rendered layout layouts/application.html.erb (Duration: 24.0ms | Allocations: 7469)
Completed 200 OK in 26ms (Views: 24.7ms | ActiveRecord: 0.1ms | Allocations: 8216)
-- update -- Changing the search to a 'get' fixed the issue, and making sure to use @q and not a custom name without changing the ransack config to match.