2016-08-23 3 views
0

私はかなり新しいプログラミングであり、私が持っている問題の答えを見つけることができません。私はアクティブレコード、レール、sqlite3を使用しています。私はUnitというモデルを持っています。ユニットには、カテゴリ、販売、色などの複数の列と、前述の列の固有の値の組み合わせごとに固有のproduct_codeがあります。私がすることができないことは、持っているproduct_codeに基づいてすべてのユニットを分けて、それぞれの種類のオブジェクトを取得して(最初または何か)取得することです。単位はまた、販売された列に誤った値を持つ必要があります。列値に基づいてオブジェクトを区切り、各グループの最初のオブジェクトを取得および取得する方法はありますか。

Unit.where(sold:false).select(:product_code).distinct 

をが、これは私だけ異なるコードを与える:私が最初に試した

#<ActiveRecord::Relation [#<Unit id: nil, product_code: "MONMJARD327">, 
#<Unit id: nil, product_code: "LAPEJARD327">, 
#<Unit id: nil, product_code: "ESTXJARD327">, 
#<Unit id: nil, product_code: "COSGJARD327">, 
#<Unit id: nil, product_code: "BOLAJARD327">, 
#<Unit id: nil, product_code: "FUNIJARD327">, 
#<Unit id: nil, product_code: "CARMJARD327">, 
#<Unit id: nil, product_code: "MOCEJARD327">, 
#<Unit id: nil, product_code: "COJGJARD327">, 
#<Unit id: nil, product_code: "RELG">, ...]> 

問題は、私はテーブルを形成することができるので、私はそれぞれ異なるグループの列の値を取得する必要があるということです。そして、私はこれを試してみました:

Unit.where(sold:false).group(:product_code) 

これは、開発にうまく働いた:

[#<Unit id: 104, product_code: "BOLAJARD327", sold: false, category_id: 16, remission_id: nil, created_at: "2016-08-23 20:30:13", updated_at: "2016-08-23 20:30:13", fabric_id: 2, color_id: 1, pattern_id: 13, batch_id: nil, profit: nil, date_sold: nil, store_id: nil>, 
#<Unit id: 106, product_code: "CARMJARD327", sold: false, category_id: 11, remission_id: nil, created_at: "2016-08-23 20:30:13", updated_at: "2016-08-23 20:30:13", fabric_id: 2, color_id: 1, pattern_id: 13, batch_id: nil, profit: nil, date_sold: nil, store_id: nil>, etc.] 

が、開発中、私はPosgresSQLを使用して、これはエラーが発生します。

PG::GroupingError: ERROR: column "units.id" must appear in the GROUP BY clause or be used in an aggregate function 

がより良い方法はありますこの選択を行い、意図したとおりにオブジェクトを取得しますか?

ありがとうございます!

+0

PostgreSQLに送られるSQLクエリは何ですか? –

+0

これは私がherokuログから検索できるものです::SELECT "units"。* FROM "units" GROUP BY "units"。 "product_code"):LINE 1:SELECT "units"。* FROM "units" GROUP BY "units "。" product_code –

+1

PostgreSQLは、選択されたカラムとグループ化されたカラムの間の整合性を厳密に守っています。 。 –

答えて

0

私はあなたがここで何をしようとして理解していますが、製品コードを含む売れ残り単位のActiveRecordの関係をしたい場合は、あなたが行うことができます全くわからない:

Unit.where(sold: false).select(:product_code) 
# which returns 
=> #<ActiveRecord::Relation [#<Unit id: nil, product_code: "ESTXJARD327">, #<Unit id: nil, product_code: "BOLAJARD327">]> 

その後、最初のものを選択するには

Unit.where(sold: false).select(:product_code).group(:product_code) 
:あなたは同じ product_codeを持つ複数のユニットを持っている場合あなたと一緒にグループ化でき

Unit.where(sold: false).select(:product_code).first 

:あなたのような何かを行うことができます

もう一度、最初のエントリを追加することで選択できます。.first

関連する問題