0

本当に奇妙なことが起こっており、それを修正する方法がわかりません。

DB に 2 つのクラスがあります。プロジェクトとタイムログ。

プロジェクト コントローラーのインデックス メソッドでは、プロジェクトのリストをリストしています。また、そのプロジェクトのログが最後に入力された日付もリストしたいと考えています。

以下のコードを実行すると、次のエラーが発生します。

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.(star)」に置き換える必要がありました。

したがって、結果の修正コード (正常に動作) は次のとおりです。

@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 に答える