1

我正在使用handles_sortable_columns 对Rails 3 中的列进行排序,并且想知道是否有一种方法可以按另一个表中的列进行排序,而不是使用连接。

我有一列是在另一个表中查找列的名称。

也就是说,我将 city.country_id 作为一列,并在 View 模板中执行以下操作:

@cities.each do |city|
    city.country.name

显示名称。

我希望能够按此列排序,但countries.name不是cities.country_id.

有谁知道这是否可以通过 gem 或任何其他简单的方式实现?如果有怎么办?

我能想到的唯一一件事是在控制器中执行 IF 语句并按国家/地区进行排序,然后使用连接运行不同的查询,但这很丑陋且容易出错,希望得到更优雅的东西。

谢谢。

4

3 回答 3

1

您可以覆盖国家模型上的 to_s 以返回名称,然后在控制器中按该名称排序吗?

在您的国家/地区模型中,通过以下方式覆盖 to_s:

def to_s
 country.name
end

然后在你的控制器中

@sorted_cities = @cities.sort_by { |obj| obj.country.to_s }
于 2012-06-27T17:44:13.813 回答
0

最后,我决定使用连接来获取正确的数据。虽然 Webjedi 的回答很有趣,但我不想覆盖任何内置函数,但很高兴知道我能做到这一点。

代码如下所示:

@countries = Country.select('countries.*, continents.name AS continent_name').joins{continent}.search(params[:term]).order(order).page(params[:page])
于 2012-08-07T09:15:28.380 回答
0

除了Webjedi回答..

 @sorted_cities = @cities.includes(:country).sort_by { |obj| obj.country.to_s } #for eager loading
于 2013-03-11T14:17:49.110 回答