0

发生了一些非常奇怪的事情,我不知道如何解决它。

我的数据库上有两个课程。项目和时间表。

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

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

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

如果我注释“选择”行并取消注释上面的行(使用 Project.all),一切正常。

知道为什么会发生这种情况吗?

def index
    #@projects = Project.all

    @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")

    respond_to do |format|
        format.html # index.html.erb
        format.json { render json: @projects }
    end
end
4

2 回答 2

0

非常感谢您的回答。你是对的。事实上,问题是当视图试图生成一个链接时,它缺少像 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")

但是,显然单独使用“(星)”是行不通的。我不得不将它替换为“项目。(星)”

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

@projects = Project.select("julianday(Date('now')) - julianday(log.timeofevent) as diff, projects.*").joins("left outer join timelogs log on projects.id = log.project_id").group("projects.id").order("log.timeofevent asc")
于 2012-06-26T21:38:34.590 回答
0

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

link_to 'Show', project

或者可能是这样的:

link_to 'Show', project_path(project)

查询中的某些内容返回没有 no 的行projects.id(正如您在错误中看到的那样,idis nil)。我怀疑你的错误是group函数,它需要一个聚合函数,所以它肯定看起来是错误的,我不确定为什么它会导致 null project.id。你的意思是使用order

添加

我刚刚意识到您可能正在使用它来消除重复项。所以无论如何,回到我认为其他人所在的地方 - 需要更多信息:)

于 2012-06-26T13:22:58.723 回答