docs/docs/going-further/associations
sidebar_position: 1
title: Associations
Associations
You can easily use Ransack to search for objects in has_many
and belongs_to
associations.
Given these associations…
class Employee < ActiveRecord::Base belongs_to :supervisor # has attributes first_name:string and last_name:string end class Department < ActiveRecord::Base has_many :supervisors # has attribute title:string end class Supervisor < ActiveRecord::Base belongs_to :department has_many :employees # has attribute last_name:string end
… and a controller…
class SupervisorsController < ApplicationController def index @q = Supervisor.ransack(params[:q]) @supervisors = @q.result.includes(:department, :employees) end end
… you might set up your form like this…
<%= search_form_for @q do |f| %> <%= f.label :last_name_cont %> <%= f.search_field :last_name_cont %> <%= f.label :department_title_cont %> <%= f.search_field :department_title_cont %> <%= f.label :employees_first_name_or_employees_last_name_cont %> <%= f.search_field :employees_first_name_or_employees_last_name_cont %> <%= f.submit "search" %> <% end %> ... <%= content_tag :table do %> <%= content_tag :th, sort_link(@q, :last_name) %> <%= content_tag :th, sort_link(@q, :department_title) %> <%= content_tag :th, sort_link(@q, :employees_last_name) %> <% end %>
If you have trouble sorting on associations, try using an SQL string with the
pluralized table ('departments.title'
,'employees.last_name'
) instead of the
symbolized association (:department_title)
, :employees_last_name
).