Rails:通过has_one关系排序

时间:2009-02-24 16:26:51

标签: ruby-on-rails

我正在为表中的可排序列构建机制。每个表都代表一个数据列表,所以我将数据库表称为“列表”。除了列位置的排序之外的所有东西都有效。我想显示由“position”字段排序的列位置,但即使我删除了:order语句也没有任何变化。

  • list.rb:has_many:columns
  • column.rb:has_one:columnposition,:order => “位置ASC”
  • columnposition.rb< - 这里的位置以简单整数存储。

我可以毫无问题地访问list.column.columnposition.position,因此关系本身似乎有效。

为什么列位置没有按“位置ASC”排序?

//编辑:我使用@lists = List.find:all

获取列表

2 个答案:

答案 0 :(得分:1)

:order => "position ASC"选项在您的关系定义级别没有帮助,因为您希望按列位置排序lists,而不是位置本身。

从模型中删除:order => "position ASC",然后尝试:

@lists = List.find(:all, :joins => { :columns => :column_positions }, \
  :order => 'column_positions.position ASC')

代替。在development模式下运行时查看生成的SQL。

干杯, 诉

答案 1 :(得分:0)

我假设您尝试订购的表达式是

list.column

你希望这个结果按位置排序吗?好吧,在这种情况下,查询不是“查看”列位置关联,因此它不遵守任何其:order子句。

我不确定为什么你需要将列位置作为自己的关联,特别是因为你将它作为:has_one,所以只有一个匹配的行。

我只是将列位置数据作为列模型中的列,然后您可以按照单个查询中的方式对其进行排序。