ActiveAdmin: sort by child association's property

南笙酒味 提交于 2019-12-12 07:46:40

问题


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.


回答1:


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



回答2:


Try this.. It will help....

index do
  column :city, :sortable => :"cities.name" do |district|
    district.city.human_name(:count => :other) if district.city.present?
  end
end

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



回答3:


Very simple and readable solution:

index do
  column :city, sortable: "cities.name"
end

controller do
  def scoped_collection
    # join cities
    super.includes :city
  end
end



回答4:


Use the name of the table, probably cities. It might look like this:

District.joins(:city).order("cities.name")


来源:https://stackoverflow.com/questions/7781193/activeadmin-sort-by-child-associations-property

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!