ActiveAdmin: sort by child association's property

dimitarvp picture dimitarvp · Oct 16, 2011 · Viewed 8.1k times · Source

I am having these objects:

class District < ActiveRecord::Base
  belongs_to :city
end
class City < ActiveRecord::Base
  has_many :districts
end

What I would like to do (and been unable to do so thus far), is: have a City column in District's index and that column should be sortable on City.name.

Closest thing I was able to do without crashing ActiveAdmin is:

index do
  column City.human_name(:count => :other), :city, :sortable => :city_id
end

Which of course is not good enough; I don't want to sort on foreign key's integer value.

Tried stuff like :sortable => 'city.name', gives an error. Even tried to do it like you do it on "pure" Rails - :joins => :cities, :sortable => 'city.name' - no luck. Tried a bunch of other stupid stuff, got annoyed and decided to humbly ask for help.

Can anyone point me in the right direction? Thanks for your time.

Answer

Evgenia Manolova picture Evgenia Manolova · Jan 31, 2013

That should also do the work:

index do
  column City.model_name.human, :city, :sortable => 'cities.name'
end

controller do
  def scoped_collection
    end_of_association_chain.includes(:city)
  end
end