В настоящее время принято решение "j." будет работать, однако это очень неэффективно, поскольку удаляет дубликаты в Ruby, а не в SQL. На самом деле он просто запускает .uniq!
для возвращенных результатов.
Эффективный и, на мой взгляд, правильный способ сделать это:
has_many :companies, :through => :contacts, :select => "DISTINCT companies.*"
Возможно, он не такой красивый, но он даст вам то, что вы хотите, не будет использовать дополнительную память и будет намного быстрее.