SQL文で嵌まった
Railsの問題ではないのでカテゴリおかしいけど…
find_by_sqlというメソッドでSQL文叩いたときの失敗
find_by_*とかだと:conditionsに配列を渡すと自動的にSQLのwhere文になるよう処理してくれるんだけど、
find_by_sqlは直でSQL書かなきゃいけないので単に配列渡してもエラーになる
そこで@users.map{|u|u.id}.join(‘ OR ‘)とかやってwhereの部分作ったんだけど…
["SELECT * FROM posts WHERE user_id = ?", @users.map{|u|u.id}.join(' OR ')]
XSS対策でこのようにやってて、@usersが2人以上だとエラーになるという現象に遭遇
なぜエラーになるかというと、この書き方だと「?」が「@users〜」と置き換わるんだけど、この時強制的に(?)文字列にされてしまう
つまり、1 OR 2 OR 3とかの条件文も’1 OR 2 OR 3′という文字列になってしまい、そんなuser_idはないので検索結果が0件なのでした
1人の場合は正常なので中々分からなかった;
(文字列型でも数字だけだと自動で型キャストされて検索出来てしまう模様;)
長々と書いたけど現状はこんな感じ

背景が薄い灰色の行がブックマーク、他がつぶやき
ブックマーク部分はまだURLを登録出来るだけなのでタグとかに対応させたい