13

私はこれらのオブジェクトを持っています:

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

私がやりたいこと(そして今のところこれができなかったこと)は、次のとおりです。のインデックスにCityDistrictがあり、その列はでソート可能である必要があります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 に答える