Как я могу получить одну запись вместо дубликатов, используя ActiveRecord в Rails? - PullRequest
0 голосов
/ 13 августа 2010

У меня модель выглядит следующим образом:

Campaign
  has_many :companies, :through => :contacts

Есть много контактов с одной и той же компанией. Я просто хочу один экземпляр каждой компании.

Я попробовал следующее:

@campaign = Campaign.find(params[:id])
@companies = @campaign.companies

Но это показывает мне все компании для каждого контакта, которому я верю. По крайней мере, так выглядит результат.

Как я могу убедиться, что добавлен только один экземпляр компании?

Ответы [ 2 ]

5 голосов
/ 13 августа 2010

Когда вы используете :through, обычно полезно использовать опцию :uniq, чтобы вы не получили повторных результатов

has_many :companies, :through => :contacts, :uniq => true
1 голос
/ 24 сентября 2010

В настоящее время принято решение "j." будет работать, однако это очень неэффективно, поскольку удаляет дубликаты в Ruby, а не в SQL. На самом деле он просто запускает .uniq! для возвращенных результатов.

Эффективный и, на мой взгляд, правильный способ сделать это:

has_many :companies, :through => :contacts, :select => "DISTINCT companies.*"

Возможно, он не такой красивый, но он даст вам то, что вы хотите, не будет использовать дополнительную память и будет намного быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...