企業でRedmineのプラグインでいくつかの変更を行ったためにレールを習得して2ヵ月近く経ちました。人生 ")、しかし、この問題はどこでも解決策を見つけることができないものです。Mysql2 ::エラー: 'フィールドリスト'の 'sum_hours'列が不明
は、私がUSER_IDとPROJECT_ID(それと問題なし)によってグループにタイムエントリの巨大なammountが必要しかし、私はこれを行う場合、私はそれらのグループに時間を合計する必要があります。
私に説明してみましょう。
estructureは次のようなものです:
| ID | project_id | user_id | issue_id | hours |
そして、この情報はこの方法で構築されています。私は1とすべての列に加えて合計を必要とするので、私は選択を追加
def time_entries_for_user(user, options={})
extra_conditions = options.delete(:conditions)
return TimeEntry.select('*,sum(hours) as sum_hours').
includes(self.includes).
where(self.conditions([user], extra_conditions)).
group('issue_id, time_entries.project_id').
order('issues.id ASC')
end
グループだけではうまくいきますが、私は和の列を表示させることはできません。 これは、このメソッドの結果から、JSONコードです:
{"test1/SubProyectoTest1":{"logs":[{"id":24,"project_id":4,"user_id":1,"issue_id":10,"hours":6.0,"comments":"","activity_id":8,"spent_on":"2016-05-03","tyear":2016,"tmonth":5,"tweek":18,"created_on":"2016-05-03T11:07:09.000Z","updated_on":"2016-05-03T11:07:09.000Z","sum_hours":9.0}],"users":[{"id":1,.....
面白いことは、他の方法でプロジェクトにより、合計欄が表示されるグループということです。 この1つはうまく機能:ログに
def time_entries_for_all_users(project)
return project.time_entries.select('*,sum(hours) as sum_hours').
includes(self.includes).
where(self.conditions(self.users)).
group('issue_id,user_id')
order('issues.id ASC')
end
{"test1/SubProyectoTest1":{"logs":[{"id":24,"project_id":4,"user_id":1,"issue_id":10,"hours":6.0,"comments":"","activity_id":8,"spent_on":"2016-05-03","tyear":2016,"tmonth":5,"tweek":18,"created_on":"2016-05-03T11:07:09.000Z","updated_on":"2016-05-03T11:07:09.000Z","sum_hours":9.0}],"users":[{"id":1.......
を、このエラーが表示さ:
ActionView::Template::Error (undefined method `sum_hours' for #)
は、時間エントリをレンダリングビューにこのコードを参照:
<% when l(:field_hours) %>
<strong><%= number_with_precision(time_entry.sum_hours, :precision => @precision) %></strong>
まあ、あなたは存在しないものを呼び出すことはできません...
2時は助けを求めてStackOverflowので、私はそれを書くのを忘れてしまったので、もっと情報が必要な場合:)。
よろしくお願いいたします。
EDITED:ボラマとエミリアーノへ
おかげで、私は手動で関係を追加する作業にそれを取得します。それだけで時間を適切に合計で1つのレコードを示したが、イムは1つだけのレコードを表示させるのuser_idによってISSUE_ID、それのグループによってグループにしようとしますが
def time_entries_for_user(user, options={})
extra_conditions = options.delete(:conditions)
return TimeEntry.select('*,sum(hours) as sum_hours').
includes(self.includes).
where(self.conditions([user], extra_conditions)).
where("time_entries.user_id",user)
group('issue_id, time_entries.project_id').
order('issues.id ASC')
end
end
: 最初のサンプルのコードに変更しました。
EDITED 2: 最後に!!私は、メソッドの順序が結果を変える可能性があることを認識しませんでした:/。最終コード:
def time_entries_for_user(user, options={})
extra_conditions = options.delete(:conditions)
return TimeEntry.group('time_entries.project_id,time_entries.issue_id').
select('*,sum(hours) as sum_hours').
includes(self.includes).
where(self.conditions([user], extra_conditions)).
where("time_entries.user_id",user)
order('issues.id ASC')
end
ありがとう!
2番目のサンプルはその1つではなく、最初のサンプルです。私はあなたが言ったようにコードを変更し、その作業、少なくとも私はjsonにオブジェクトを変更する場合は、フィールドを見ることができますが、1レコードのみ。 私はなぜ私が追加したグループを使用しないのか分からない。 –