71 lines
1.6 KiB
Markdown
71 lines
1.6 KiB
Markdown
---
|
|
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...
|
|
|
|
```ruby
|
|
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...
|
|
|
|
```ruby
|
|
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...
|
|
|
|
```erb
|
|
<%= 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`).
|