delete_all の条件指定
ruby 1.8.7 (2010-08-16 patchlevel 302)
mysql2.11.10
を使っています。
delete_allで、条件を指定したいのですがうまくいかずハマっています。
arr_s と丸括弧の間にシングルコーテーションが入ってしまってdeleteできない状態です。
(ハッシュで条件指定したSearchはきちんと削除されています。)
間違いがお分かりになる方、どうか教えてください。。。
※arr で対象のidを取ってきて、それをすべてカンマ区切りで arr_s に入れて関連テーブルの削除キーとして使っていますが (has_manyを使いたくないので)ほかに素敵な処理の方法があれば参考に知りたいです。。
#search_attr_hash = {:search_data=>"あ", :search_type=>"0"}
def clear_db(search_attr_hash)
case search_attr_hash[:search_type].to_i
when 1..3
logger.info "1...3"
s = Data.find :all,:select => ["id"],
:conditions=>["from_user = ?",search_attr_hash[:search_word] ]
when 0 || 4
logger.info "0 or 4"
s = Data.find :all, :select => ["id"],
:conditions=>["text like ?", "%"+search_attr_hash[:search_word]+"%" ]
end
arr = []
s.each{|k|
arr.push k["id"] if k != blank?
}
arr_s = arr.join(",")
logger.info arr_s #=>3,4,5,6
DataUrl.delete_all["data_id in (?)", arr_s ]
#=>DELETE FROM `data_urls` WHERE (data_id in ('3,4,5,6'))
DataTag.delete_all["data_id in (?)", arr_s ]
#=>DELETE FROM `data_tags` WHERE (data_id in ('3,4,5,6'))
DataRelation.delete_all["data_id in (?)", arr_s ]
#=>DELETE FROM `data_relations` WHERE (data_id in ('3,4,5,6'))
Search.delete_all["search_type = ? AND search_word = ?",search_attr_hash[:search_type], search_attr_hash[:search_word]]
#=>DELETE FROM `searches` WHERE (search_type = '0' AND search_word = 'あ')
Data.delete_all["id in (?)", arr_s ]
#=>DELETE FROM `twits` WHERE (id in ('3,4,5,6'))
return arr.count #=>4
end