У меня есть модель Tag только с одним атрибутом: :name
.
tag.rb:
class Tag < ActiveRecord::Base
has_many :taggings, :dependent => :destroy
has_many :posts, :through => :taggings
has_many :subscriptions
has_many :subscribed_users, :source => :user, :through => :subscriptions
end
(itимеет many-to-many
связь с Post модель):
class Post < ActiveRecord::Base
attr_accessible :title, :content, :tag_names
validates :title, :presence => true,
:length => { :maximum => 30 },
:uniqueness => true
validates :content, :presence => true,
:uniqueness => true
has_many :taggings, :dependent => :destroy
has_many :tags, :through => :taggings
attr_writer :tag_names
after_save :assign_tags
def tag_names
@tag_names || tags.map(&:name).join(' ')
end
private
def assign_tags
if @tag_names
self.tags = @tag_names.split(" ").map do |name|
Tag.find_or_create_by_name(name)
end
end
end
end
Как вы можете себе представить, я не хочу иметь 2 тега с одинаковым именем.Прямо сейчас, возможно создать их.Если есть такой тег: <Tag id=1, name=food>
, а затем создается другой тег, подобный этому: <Tag id=2, name=food>
.Я хочу, чтобы второе было проигнорировано, потому что уже есть тег с именем food.
(В значительной степени, как все системы тегов работают)
Есть какие-либо предложения для достижения этой цели?