2017-05-14 4 views
0

I次のクエリを持っている:は、どのように私はルビーのActiveRecordとbaby_sequelクエリに文字列を渡すん

Event.where.has { (status == 'active')}私は、クエリに文字列を渡すことができるようなstring = "(status == 'active')"ではなく、それを書くようにしたい

実際の声明では

どうすればこのようなことができますか?

String.interpolate {string}Event.where.hasステートメント内で使用しようとしましたが、エラーが発生しました。

答えて

0

通常、RubyコードとしてStringを評価することは悪い考えです。

lambdaを使用すると、同様の効果を得ることができます。

func = ->() { status == 'active' } 
Event.where.has(&func) 

しかし、あなたが本当にStringを使用したい場合、あなたはevalを使用することができます。これは注入攻撃にさらされ、コードを理解しにくくすることを覚えておいてください。

string = "(status == 'active')" 
Event.where.has { eval(string) } 
+0

セキュリティエラーのためですか? – Angela

+0

はい、文字列を評価し、文字列の内容をユーザーが入力できる場合、サーバー上で実行するRubyコードの文字列を作成できます。 – kcdragon

+0

ラムダは私をそれから守ってくれるだろうか? – Angela

関連する問題