Search code examples
ruby-on-railsransack

Search on Welcome Controller


I have a Product (imovel) controller where the users can create his own Products (imovels). I am using devise for the authentication and the CRUD (create, Update, Delete) needs login. So for the clients be able to see the products and doesn't need a user, I created the Welcome controller where so it is the root.
In the Index of the Products I use Ransack to do the research in the table and works just fine. (very happy about it).
On the welcome controller I try to do the same thing, but when I submit the search the page gets redirect to the imovels#index.

Controller:

class WelcomeController < ApplicationController
  def index
    @q = Imovel.ransack(params[:q])
    @imovel = @q.result(distinct: true)
  end
end

View:

<div class="container text-center">
  <%= search_form_for @q do |f| %>
      # Search if the name field contains...
      <%= f.label :descricao_cont %>
      <%= f.search_field :descricao_cont %>
      <%= f.submit "Pesquisar", class: "btn btn-primary" %>
  <% end %>
</div>

Another thing that can be important in the index (imovels#index) there is a for in a tr and the information is filtered there:

Imovels Index

<tbody>
      <% @imovels.each do |imovel| %>
      <tr>
            <td><%= imovel.id %></td>
            <td><%= imovel.descricao %></td>
<% end %>

And in the welcome controller where I need the search, I used Divs:

Welcome Index

<% @imovels.each do |imovel| %>
  <div class="card">
    <div class="containerImovel">
      <h4><b><%= imovel.descricao %></b></h4>
      <p><%= imovel.cidade %> - <%= imovel.bairro.nome %> </p>
 </div>
  </div>
<% end %>

How can I do the search on the divs of welcome controller? Ransack is the better option for it? It is possible to search in the has_many :through association?


Solution

  • Add a path for it in your routes.rb

    resources :imovel do
      collection do
        match 'search' => 'welcome#search', via: [:get, :post], as: :search
      end
    end
    

    and then add a new controller action to WelcomeController

    def search
      index
      render :index
    end
    

    and afterwards modify the search form like so

    <%= search_form_for @q, url: search_imovel_path, html: { method: :post } do |f| %>
    

    Be sure to recheck the naming/variables as I'm not completely familiar with your app