Подтвердить что ты не робот

ActiveAdmin: сортировка по свойствам дочерней ассоциации

У меня есть следующие объекты:

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', выдает ошибку. Даже пытался это сделать, как будто вы делаете это на "чистых" рельсах - :joins => :cities, :sortable => 'city.name' - не повезло. Пробовал кучу других глупых вещей, рассердился и решил смиренно обратиться за помощью.

Может ли кто-нибудь указать мне в правильном направлении? Спасибо за ваше время.

4b9b3361

Ответ 1

Это также должно выполнить работу:

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

Попробуйте это.. Это поможет....

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

Используйте имя таблицы, возможно, cities. Это может выглядеть так:

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

Ответ 4

Очень простое и понятное решение:

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

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