2010-12-15 80 views
0

我正在使用acts-as-taggable。兩種模式:用戶和帖子。如何查看模型實例上所有用戶的標籤?

Posts belongs_to :user 
User has_many :posts 

郵政行爲作爲標籤。 用戶作爲標記者

所有這些都很簡單,並且正在工作。但是,我有一個用例,可能不在這個插件的工作方式之外。

我希望帖子能夠被多個用戶標記。當來自用戶的帖子創建一個標籤,它並不顯示,當你做到以下幾點:

p = Post.first 
p.tag_list # this returns [] 

如果你看一下生成的SQL它選擇記錄,其中「tagger_id」爲NULL。在這種情況下,tagger_id當然是user_id,並且非常不是NULL。

但是,如果你回到它,你可以得到你想要的。

p = Post.find(1) # get a post to work with 
p.tags_from(p.user) # returns an array of the tags: ['cats','dogs','wildebeasts'] 

This works。

現在,問題是我希望另一個用戶能夠前來,並添加標籤的帖子。也許這個用戶會認爲這是有幫助的。我們假設這樣做是有道理的。可以成爲主持人......無論如何。

鑑於上述情況,假設多個用戶添加了標籤,我將如何獲得給定帖子上所有標籤的列表?

感激,

NJ

回答

4

我不知道任何的插件,你指定的,我仍然在學習Rails的。但我不認爲

p = Post.tag_list 

將是你想要的,反正。您要求提供Post類的標籤列表,而不是特定帖子的標籤列表。例如,如果用戶具有「電子郵件」和「名稱」列,則您也無法這樣做:

u = User.names 
u = User.emails 

這並沒有什麼意義。但你可以這樣做:

User.column_names 
#=> ["id", "email", "hashed_password", "created_at", "updated_at"] 

因爲這是一種類方法。現在,也許tag_list是一個類方法,但它看起來像用於查找孤立標籤或某些東西,這是由於它看起來爲空tag_givers。

但自從我還是新來的Rails,我也不知道你的插件是如何工作的,這裏有一些事情你可以嘗試把我的頭頂部:

p = Post.find(1) 
p.tag_list # p.column_name_of_the_column_that_holds_the_tags should work 
# or, maybe pass in ALL users as an array 
p.tags_from(User.all) 

還是讓我知道這些做。

+0

感謝您的迴應,但其中一些特殊的插件,這是沒有非常有據可查的文件,我沒有太多的挖掘源頭弄清楚。還沒有。 :) – 2010-12-19 17:11:59

+0

我覺得我寫得太多了。你在我最後的代碼塊中嘗試了我的建議嗎? – danneu 2010-12-19 17:35:40

+0

如果你談論話題,不要擔心寫太多;對不起,我沒有注意到我的重複你的答案。唯一我要說的是編輯並使p成爲實例變量@p,否則視圖將不可用。 – mark 2010-12-19 19:13:33

0

也許我失去了一些東西,但:

p = Post.tag_list # this returns [] 

#should be 
#... 
@post.find params[:id] 
#...  
@post.tag_list 

您目前正在呼籲tag_list對後級,而不是它的一個實例。

+0

你可能是對的。我會在稍後檢查並回復你。謝謝! – 2010-12-19 17:11:00

+0

試一試,讓我們知道。如果這是問題,請接受Dobry Den的回答。 – mark 2010-12-19 19:11:31

相關問題