2010-06-16 43 views
0

到目前爲止,我一直在使用acts_as_taggable_on插件來標記公告。建立模型之間的問題

即插件創建下表:

引用的Tagging:涉及標籤和通告表(用於標記物品,它具有一個名爲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?因爲當我嘗試,我得到

未定義的方法'標籤

回答

1

什麼,你居然已經發布的是你已經試過Announcement.tags。但tags將是Announcement實例上的一種方法,這就是將其稱爲Announcement類中的一種方法,該方法不起作用。

假設你實際調用an_announce.tags,還需要AnnouncementTag有許多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

你應該嘗試@ announcement.tags,因爲標籤是聲明類的一個實例方法(模型)。

@announcement = Announcement.first 
+0

那麼,如果我想要獲得所有使用特定tag_id標記的公告,該怎麼辦? – 2010-06-16 15:02:10

+0

'Tag.find(tag_id).announcements' – Chowlett 2010-06-16 15:05:21

+0

這是行不通的。 – 2010-06-16 15:12:52