2011-01-24 87 views
1
query = Micropost.order("created_at desc") 
    unless params[:tag_id].blank? or params[:tag_id] == "Select a tag" 
    tags = Tag.all 
    params[:tag_id].each do |index| 
     query = tags[Integer(index) - 1].microposts.order("created_at desc") & query 
    end 
    end 

這是我的代碼。基本上,標籤有微博,當我從params [:tag_id](我使用多個select_tag)指定一個標籤數組時,我想要標籤指定的所有微博。rails/ruby​​:過濾

此代碼適用於數組只有一個標籤但似乎無法使用超過1的情況。是否錯誤?

+0

我得到「tag_id」=> [「64」,「6」]爲tag_id,是必要的拆分? – SuperString 2011-01-24 23:24:45

回答

0

我不確定我是否完全理解你正在嘗試做什麼。但也許沿着這些路線的東西是你(在unless內)?

對於任何標籤的帖子:

tags = Tags.where(:id => params[:tag_id]).all 
posts_with_tags = tags.map(&:microposts).flatten.uniq 

對於具有所有標籤的帖子:如果你希望所有微柱的與標籤相關的微柱的選擇集合的交集

tags = Tags.where(:id => params[:tag_id]).all 
posts_with_tags = tags.map(&:microposts).inject { |memo, elem| memo & elem } 
+0

這工作在給a或b。你如何修改以提供a和b?其中a和b是標籤。 – SuperString 2011-01-25 05:11:41

+0

已編輯;那個怎麼樣? – 2011-01-25 11:27:04

0

您只需查詢與所選標籤關聯的所有micropost並收集微博。 與Rails3中

unless params[:tag_id].blank? or params[:tag_id] == "Select a tag" 
    query= Tag.where(["id in (?)",params[:tag_id]]).collect(&:microposts).uniq 
end 

也許我誤解你的問題,對不起。