I have a Post model, which is linked to the Tag model via a
has_and_belongs_to_many relationship and a join table. Post also has handy
tagstring and tagstring= methods that allow you to define tags by
space-delimited strings.
The problem is this. Whether I assign a list of tags with the tagstringmethod
or use p.tags << to form the list of tags, if (on a newly-created
post) I try to assign a tag that already exists in the tags table, the entry
won''t save in the join table. If I go back and assign it again (this
time
the Post is not a new object), it''ll work. I know acts_as_tag had a
similar
problem (the same problem?), but I can''t find anywhere that talks about
it.
Here''s my Tag and Post models (the only relevant code I could think of
posting):
class Post < ActiveRecord::Base
validates_presence_of :title, :body
has_many :comments
has_and_belongs_to_many :tags, :join_table => ''tagmap'',
:order => ''name asc''
def tagstring
tags.inject([]){|s,t| s << t.name}.join '' ''
end
def tagstring=(string)
self.tags = string.split.map do|t| Tag.get(t) end
end
end
class Tag < ActiveRecord::Base
validates_presence_of :name
has_and_belongs_to_many :posts, :join_table => ''tagmap'',
:order =>
''created_at desc''
def self.get(name)
Tag.find_or_create_by_name name
end
end
--
- Mik Mifflin
"Whether freedom is going to survive at all is in doubt, but we''ve
got to
try" - RMS
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
http://wrath.rubyonrails.org/pipermail/rails/attachments/20060105/a043f181/attachment.html