2011-01-24 3 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つしかない場合でも動作しますが、1より大きい値では動作しません。

+0

tag_id => ["64"、 "6"]がtag_idに必要ですが、分割が必要ですか? – SuperString

答えて

0

あなたがしようとしていることを十分に理解しているかどうかはわかりません。しかし、おそらくこれらの行に沿ったものは、あなたが後になったものです(unlessに入ります)?あなたが選択したタグに関連したマイクロポストのコレクションを持つすべてのMicropostの交差点をしたい場合は

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

+0

編集済み。どのようにそのことについて? –

0

:すべてのタグを持っている投稿を

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

:任意のタグを持っている投稿を

選択したタグに関連付けられているすべてのマイクロポストを照会し、マイクロポストを収集するだけです。 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 

たぶん私は申し訳ありませんが、あなたの質問を誤解していると 。

+0

わかりません、あなたは 'flatten'を見逃している可能性があります –

+0

私はすべてのための未定義のメソッドを持っています – SuperString