Rails has_many,through,group不太合适

时间:2012-06-14 01:28:04

标签: ruby-on-rails ruby-on-rails-3 activerecord associations

首先,我的模型定义:

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

基本上我打算拥有的是具有一个或多个数据文件的批处理,每个数据文件都是特定类型,我希望能够批量获取所有唯一的文件类型。基于上述实现,我希望以下工作:

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

1 个答案:

答案 0 :(得分: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

来自here