在rails 3中排序has_many关系

时间:2012-06-22 14:37:54

标签: ruby-on-rails activerecord has-many

我的模特是

class Job < ActiveRecord::Base
    belongs_to :client
end

class Client < ActiveRecord::Base
   has_many :jobs
end

在控制器中我希望得到客户端已排序的作业。 如果我这样做(没有订购)

@client = Client.find(params[:id], :include => {:jobs => :status})

一切都好。但如果我添加订购:

@client = Client.find(params[:id], :include => {:jobs => :status}, :order => 'job.level DESC')

//:动态设置顺序(不是在这个例子中) - 我知道:has_many中的顺序。

结果只有3行(每个job.level一行)。我记录了sql查询并执行了它,结果没问题,但在应用程序中我只有这3行。 排序工作的正确方法是什么?谢谢

2 个答案:

答案 0 :(得分:0)

您可以尝试直接在模型中指定订单而不是控制器

class Job < ActiveRecord::Base
  belongs_to :client, :order => 'level DESC'
end

OR

class Client < ActiveRecord::Base
  has_many :jobs, :order => 'level DESC'
end

此外,作业模型中的级别是什么数据类型?如果您可以发布日志以获取有用的sql查询。还有,你试过吗

:order => 'jobs.level'  

而不是您发布的代码中使用的单数job.level?

答案 1 :(得分:0)

这不是我原本想要的,但它有效,所以这就是答案

@jobs = @client.jobs.find(:all, :order => sort_column + " " + sort_direction)