70 Stimmen

has_and_belongs_to_many, Vermeidung von Duplikaten in der Join-Tabelle

Ich habe einen ziemlich einfachen HABTM-Satz von Modellen

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 

Jetzt funktioniert alles einwandfrei, außer dass ich eine Menge Duplikate in der Tabelle Tags erhalte.

Was muss ich tun, um Duplikate (basierend auf dem Namen) in der Tabelle "Tags" zu vermeiden?

0voto

ajbraus Punkte 2841

Fügen Sie einen Index für die Eigenschaft :name hinzu und verwenden Sie dann die Methode find_or_create in der Methode Tags#create

docs

0voto

Matthew Bennett Punkte 193

Fügen Sie einfach eine Prüfung in Ihrem Controller hinzu, bevor Sie den Datensatz hinzufügen. Wenn dies der Fall ist, tun Sie nichts, wenn nicht, fügen Sie einen neuen Datensatz hinzu:

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

else
  u.articles << a
end

Mehr: "4.4.1.14 collection.exists?(...)" http://edgeguides.rubyonrails.org/association_basics.html#scopes-for-has-and-belongs-to-many

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X