2010-06-16 4 views
0

지금까지는 공지 사항에 태그를 지정하기 위해 acts_as_taggable_on 플러그인을 사용해 왔습니다.모델 간의 관계 구축 문제가 있습니다.

taggings : 플러그인이 다음 표 만듭니다

태그 및 공지 사항 테이블을 관련 (I 아래에 설명 할 것이다 어떤 태그가 달린 항목에 대한, 그것은 I가에 "announcement_id을"의 이름을 변경 taggable_id라는 필드가 있습니다) .

태그 : 아이디와 아이디가 있습니다.

다른 날, 특정 태그로 태그가 추가 된 알림을받을 방법이 없다는 것을 알았지 만 Announcement.tagged_with(tag_name)을 수행하고 있으며 이름으로 검색하는 것을 원하지 않지만 이드는 검색합니다.

그래서 플러그인에서 기능을 거의 사용하지 않아서 태그 작성 및 태그 테이블에 대한 모델을 만들기로 결정했습니다. 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을 실행할 수 없습니다? 내가하려고 할 때 때문에, 나는 당신이 실제로 게시 한 것은 당신이 Announcement.tags을 시도한 것입니다

정의되지 않은 메서드 '태그'

답변

1

를 얻을. 그러나 tagsAnnouncement 인스턴스의 메소드 일 수 있으며이를 Announcement 클래스의 메소드로 호출하므로 작동하지 않습니다.

실제로 an_announce.tags를 호출하고 가정, 당신은 또한 많은 taggings을 가지고 AnnouncementTag 필요 -과 같이 :

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로 태그가 지정된 모든 공지 사항을 가져 오려면 어떻게해야합니까? –

+0

'Tag.find (tag_id) .announcements' – Chowlett

+0

그건 작동하지 않습니다. –