到目前为止,我一直在使用acts_as_taggable_on插件来标记公告。
该插件会创建以下表格:
标记:关联标记和公告表(对于标记项,它有一个名为taggable_id的字段,我将其重命名为“announcement_id”,我将在下面解释)。
标签:具有标签ID和名称。
前几天,我发现我无法使用某个标记标记公告,但是正在执行Announcement.tagged_with(tag_name)
,我不想按名称搜索,而是搜索id。
因此,由于我几乎没有使用该插件中的任何功能,因此我决定为标记和标记表创建模型,以实现此目的:Announcement.tags
。
模型的关系如下:
修改
class Tagging < ActiveRecord::Base
belongs_to :announcement
belongs_to :tag
end
class Tag < ActiveRecord::Base
has_many :taggings
has_many :announcements, :through => :taggings
end
class Announcement < ActiveRecord::Base
has_many :taggings
has_many :tags, :through => :taggings
为什么我不能执行命令Announcement.tags
?因为当我尝试时,我得到了
未定义的方法`tags'
答案 0 :(得分:1)
您实际发布的内容是您尝试Announcement.tags
。但是tags
将是Announcement
实例上的一种方法,并且它将其称为Announcement
类上的方法,这将无效。
假设您实际上正在呼叫an_announce.tags
,您还需要Announcement
和Tag
才能拥有多个taggings
- 就像这样:
class Announcement < ActiveRecord::Base
has_many :taggings
has_many :tags, :through => :taggings
end
class Tag < ActiveRecord::Base
has_many :taggings
has_many :announcements, :through => :taggings
end
答案 1 :(得分:1)
你应该试试@ announcement.tags,因为tags是Announcement类(模型)的实例方法。
@announcement = Announcement.first