0

Во-первых, мои модели определения:Рельсы has_many, через, группа не совсем работает

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 

Что я делаю неправильно?

EDIT: 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)) 
+0

Вы пробовали ': group =>: file_type_id'? Отправьте созданный SQL. – Anil

+0

Добавил SQL на вопрос .. Спасибо – Adnan

ответ

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.

+0

Оба эти сработали. Благодаря! Любая идея почему: группа не сделала? – Adnan

+0

У меня есть несколько (цепочек) ': through', и это порождает мне эту ошибку' Unknown key:: uniq. Допустимыми являются:: class_name,: class,: foreign_key,: validate,: autosave,: table_name,: before_add,: after_add,: before_remove,: after_remove,: extend,: primary_key,: dependent,: as,: through,:, source,: source_type,: inverse_of,: counter_cache,: join_table' – mariowise

Смежные вопросы