ActiveAdmin:按子协会的属性排序

时间:2011-10-15 22:52:10

标签: ruby-on-rails-3 activeadmin

我有这些物品:

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

我想做的事情(目前为止无法做到)是:在City的索引中有一个District列,该列应该在{{1}上排序}。

我能够在不崩溃ActiveAdmin的情况下做的最近的事情是:

City.name

这当然不够好;我不想对外键的整数值进行排序。

尝试index do column City.human_name(:count => :other), :city, :sortable => :city_id end 之类的内容会出错。甚至试图像你在“纯粹的”Rails上那样做 - :sortable => 'city.name' - 没有运气。尝试了一堆其他愚蠢的东西,生气了,决定谦卑地寻求帮助。

有人能指出我正确的方向吗? 谢谢你的时间。

4 个答案:

答案 0 :(得分:22)

那也应该做的工作:

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

答案 1 :(得分:10)

试试这个..这会有所帮助......

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

答案 2 :(得分:4)

非常简单易读的解决方案:

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

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

答案 3 :(得分:2)

使用表格的名称,可能是cities。它可能看起来像这样:

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