Ruby on rails 在ActiveRecord上使用select会抛出;“没有路线匹配”;

Ruby on rails 在ActiveRecord上使用select会抛出;“没有路线匹配”;,ruby-on-rails,ruby-on-rails-3,activerecord,Ruby On Rails,Ruby On Rails 3,Activerecord,一些非常奇怪的事情正在发生,我不知道如何修复它 我的数据库上有两个类。项目和时间日志 在Projects controller的索引方法中,我列出了一个项目列表,还想列出为该项目输入任何日志的最后日期 当我运行下面的代码时,我得到以下错误 No route matches {:action=>"show", :controller=>"projects", :id=>#<Project id: nil, name: "Project A", user_id: 1, cre

一些非常奇怪的事情正在发生,我不知道如何修复它

我的数据库上有两个类。项目和时间日志

在Projects controller的索引方法中,我列出了一个项目列表,还想列出为该项目输入任何日志的最后日期

当我运行下面的代码时,我得到以下错误

No route matches {:action=>"show", :controller=>"projects", :id=>#<Project id: nil, name: "Project A", user_id: 1, created_at: nil, updated_at: nil>}

这很可能是因为在视图中,代码试图创建显示每个项目的链接。这可能是这样的:

link_to 'Show', project
link_to 'Show', project_path(project)
或者像这样:

link_to 'Show', project
link_to 'Show', project_path(project)
查询中的某些内容返回的行没有
projects.id
(正如您在错误中看到的,
id
nil
)。我怀疑您的错误是
函数,它需要一个聚合函数,因此它看起来肯定是错误的,我无法立即确定它为什么会导致null project.id。您的意思是使用
订单

补充
我刚意识到你可能在用它来消除重复的东西。所以不管怎样,回到其他人当时的位置,我想-需要更多信息:)

非常感谢你的回答。你说得对。事实上,问题是当视图试图生成链接时,它丢失了ID之类的内容

我认为这会起作用:

@projects = Project.select("julianday(Date('now')) - julianday(log.timeofevent) as diff, *").joins("left outer join timelogs log on projects.id = log.project_id").group("projects.id").order("log.timeofevent asc")
但是,很显然,单靠“明星”是行不通的。我不得不把它改成“项目(星)”

因此,产生的固定代码(工作正常)是:


我怀疑错误发生在您的视图中,而不是控制器中。请添加堆栈跟踪中的前几行和视图中的匹配行,就是这样。显示您的视图和路由。这可能就是你的问题所在。