私は次のようなSQLクエリを実行する必要があります
sql = 'SELECT * FROM users WHERE id != ' + self.id.to_s + ' AND id NOT IN (SELECT artner_id FROM encounters WHERE user_id = ' + self.id.to_s + ')'
sql += ' AND id NOT IN (SELECT user_id FROM encounters WHERE partner_id = ' + self.id.to_s + ' AND predisposition = ' + Encounter::Negative.to_s + ')'
sql += ' AND cfg_sex = ' + self.sex.to_s + ' AND cfg_country = ' + self.country.to_s + ' AND cfg_city = ' + self.city.to_s
sql += ' ORDER BY rand() LIMIT 1'
AR.find_by_sqlで実行できますが、前のコードは読みにくいです。そのクエリを構築できるクエリビルダーはありますか?
たとえば、Kohana(これはPHPフレームワークであり、私はphp開発者ですが、そのkid-languageをruby / railsに変更したい)には、次のように機能するクエリビルダーがあります。
$sql = DB::select('*')->from('users');
$sql->where('id', 'NOT_IN', DB::expr('SELECT partner_id FROM encounters WHERE user_id = '.$user->id));
$sql->where('id', 'NOT_IN', DB::expr('SELECT user_id FROM encounters WHERE partner_id = '.$user->id.' AND predisposition = '.Encounter::Negative));
....
etc
...
コハナクエリビルダーのようなクエリビルダーで構築されたクエリは、より読みやすく、理解しやすくなっています。
この問題を解決するための宝石はありますか?