Search code examples
ruby-on-railsransack

Narrowing search with ransack


I've got workers, workers has many posts. I want to be able to search for a worker, displaying all his posts, then narrow down to the date the posts where made. I can search by name of the worker but when I try to search for date aswell it just displays all posts for that worker (if the date exists in one post).

what I'm trying to run with:

controller:

@q = Worker.ransack(params[:q])
@workers = @q.result.order(name: :asc).includes(:posts).uniq

view:

<%= search_form_for @q do |f| %>

<%= f.label :name_cont %>
<%= f.search_field :name_cont %>

<%= f.label :posts_date_start %>
<%= f.search_field :posts_date_start %>

<%= f.submit %>
<% end %>

<% @workers.each do |worker| %>
<% worker.posts.group_by { |t| t.date.to_time.beginning_of_month }.each do |month, posts| %>
<some table header logic>
<% posts.each do |post| %>
<table content>

Solution

  • I solved it like this

    instead of

    <% worker.posts.group_by { |t| t.date.to_time.beginning_of_month }.each do |month, posts| %>
    

    I did

    <% Post.search_post(params[:search_post]).search_post_present(params[:search_post_present]).where(worker_id: worker.id).order(date: :asc).group_by { |t| t.date.to_time.beginning_of_month }.each do |month, posts| %>
    

    that pointed to a search hepler in post.rb

    def self.search_post(search_post)
      if search_post
        where('date LIKE ?', "%#{search_post}%")
      else
        all
      end
    end
    

    I then overlapped the forms for both ransack and this search, so both are run with the same submit button, and that worked just fine.