0

まず、私のモデル定義:

class Batch < ActiveRecord::Base
  has_many :data_files
  has_many :file_types, :through => :data_files, :group => "data_files.file_type_id"
end

class DataFile < ActiveRecord::Base
  belongs_to :batch
  belongs_to :file_type
end

class FileType < ActiveRecord::Base
  has_many :data_files
end

したがって、基本的に私が意図しているのは、1 つ以上のデータ ファイルを含むバッチです。各データ ファイルは特定のタイプであり、バッチ内のすべての一意のファイル タイプを取得できるようにしたいと考えています。上記の実装に基づいて、次のことが機能すると予想していました。

batch.file_types

ただし、そのgroup部分は機能していないようです。つまり、ファイルの種類のリストは一意ではないため、どこでもこれを行う必要があります。

batch.file_types.uniq

私は何を間違っていますか?

編集: 生成された SQL は次のとおりです。

 SELECT `file_types`.* FROM `file_types` 
 INNER JOIN `data_files` ON `file_types`.id = `data_files`.file_type_id 
 WHERE ((`data_files`.batch_id = 234))
4

1 に答える 1

1

これを試して:

has_many :file_types, :through => :data_files, :uniq => true

他のよりデータベース効率の良い方法は次のとおりです。

has_many :file_types, :through => :data_files, :select => "DISTINCT file_types.*"

幸運を!

Rails 4 の Rails 4 の更新
: has_many :file_types, -> { distinct }, through: :data_files

ここから。

于 2012-06-14T13:38:52.557 に答える