gpt4 book ai didi

sql - Rails 3.2 : Ordering a has_many :through selection, 当直通模型具有 default_scope 时

转载 作者:行者123 更新时间:2023-12-02 00:08:35 24 4
gpt4 key购买 nike

我有一个简单的时间跟踪应用程序,其中包含项目、任务和条目。

设置很简单:

class Project < ActiveRecord::base
has_many :tasks
has_many :entries, :through => :tasks
end

class Task < ActiveRecord::base
belongs_to :project
has_many :entries

default_scope order("name asc") # this causes problems
end

(Entry 完全简单,所以我将其省略)

但是,当我尝试对从项目中选择的条目进行自定义排序时,我遇到了麻烦。具体来说,我正在尝试选择最新的条目,如下所示:

latest_entry = project.entries.order("created_at desc").first

但是由于 :through => :tasksTask 具有的 default_scope,Rails 执行的实际查询变成:

SELECT `entries`.* FROM `entries`
INNER JOIN `tasks` ON `entries`.`task_id` = `tasks`.`id`
WHERE `tasks`.`project_id` = 23
ORDER BY name asc, entries.date desc LIMIT 1 -- wrong order!

请注意 ORDER BY 子句 - 它包含来自 Taskdefault_scope,并且只有在此之后它才包含我指定的顺序。

所以基本上,我没有获得项目中所有条目的最新条目,而只获得第一个任务中的最新条目。

有什么办法可以解决这个问题吗?似乎应该有一种方法可以在 through 模型上忽略/否定 default_scope (而不完全删除 default_scope)

最佳答案

怎么样reorder :

latest_entry = project.entries.reorder("created_at desc").first

关于sql - Rails 3.2 : Ordering a has_many :through selection, 当直通模型具有 default_scope 时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13289019/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com