13

我有这些对象:

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

我想做的(并且到目前为止无法这样做)是:City在 的索引中有一个列,District并且该列应该可以在City.name.

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

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

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

尝试了类似的东西:sortable => 'city.name',给出了一个错误。甚至尝试像在“纯”Rails 上那样做 - :joins => :cities, :sortable => 'city.name'- 没有运气。尝试了一堆其他愚蠢的东西,很生气,决定谦虚地寻求帮助。

谁能指出我正确的方向?谢谢你的时间。

4

4 回答 4

25

这也应该做的工作:

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
于 2013-01-31T09:19:48.680 回答
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
于 2012-11-28T19:39:08.660 回答
5

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

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

controller do
  def scoped_collection
    # join cities
    super.includes :city
  end
end
于 2015-03-16T18:43:13.850 回答
2

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

District.joins(:city).order("cities.name")
于 2011-10-16T03:18:34.677 回答