ActiveAdmin:按关联排序(belongs_to)

时间:2012-06-29 17:42:16

标签: ruby-on-rails ruby-on-rails-3.1 activeadmin

我有一个索引管理员视图,我在其中显示关联的模型City。我希望能够按城市名称排序,但是当我点击列标题进行排序时,我得到以下错误:

ActiveRecord::StatementInvalid in Admin/deals#index

SQLite3::SQLException: no such column: cities.name: SELECT  "deals".* FROM "deals"  ORDER BY cities.name desc LIMIT 30 OFFSET 0

索引视图

ActiveAdmin.register Deal do
  index do
     column :id
     column :city
  end
  ...
end

模型

class Deal < ActiveRecord::Base
  belongs_to :city
end

我如何按城市排序?

2 个答案:

答案 0 :(得分:2)

使用Rails 3或4:

index do
  column :city, :sortable=>:"cities.name"

  ...
end

然后,在同一个文件中,您需要这样,以便Deal查询包含City属性:

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

  ...
end

答案 1 :(得分:0)

查看https://github.com/gregbell/active_admin/pull/623#issuecomment-2419393以及以下评论。您必须告诉activeadmin如何进行排序 - 可能类似于column :city, :sortable => 'cities.name'并在定义交易索引页面之前定义joined范围。像

这样的东西
scope :joined, :default => true do |deals|
  deals.includes [:city]
end