has_and_belongs_to_many, избегая дублирования в таблице соединений - PullRequest
56 голосов
/ 15 июля 2009

У меня довольно простой набор моделей HABTM

class Tag < ActiveRecord::Base 
   has_and_belongs_to_many :posts
end 

class Post < ActiveRecord::Base 
   has_and_belongs_to_many :tags

   def tags= (tag_list) 
      self.tags.clear 
      tag_list.strip.split(' ').each do 
        self.tags.build(:name => tag) 
      end
   end 
end 

Теперь все работает нормально, за исключением того, что я получаю тонну дубликатов в таблице тегов.

Что мне нужно сделать, чтобы избежать дубликатов (оснований на имени) в таблице тегов?

Ответы [ 12 ]

0 голосов
/ 30 декабря 2017

Просто добавьте проверку в свой контроллер перед добавлением записи. Если это так, ничего не делайте, если нет, добавьте новый:

u = current_user
a = @article
if u.articles.exists?(a)

else
  u.articles << a
end

Подробнее: "4.4.1.14 collection.exists? (...)" http://edgeguides.rubyonrails.org/association_basics.html#scopes-for-has-and-belongs-to-many

0 голосов
/ 28 августа 2013

Вы должны добавить индекс для свойства tag: name, а затем использовать метод find_or_create в теге # create метод

документы

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