2017-01-16 2 views
0

を含みRails API)。この文字列をハッシュに変換することは可能ですか? eval()は機能しません。変換文字列は、私のようなクエリを作ってるんだ

(YAMLのための)編集:代わりにユーザー入力Rubyコードをさせるの

def show 
    str = "address, { friends: [ address, followers ] }" 
    args = YAML.load("[ #{str} ]") 
    user = User.includes(*args).find(params[:id]) 
    render :template => 'users/show' 
end 
+2

'eval'が働くだろう大括弧で囲んだ方がいいですが、ユーザの入力に 'eval'を使うのは非常に愚かでしょう。 –

+1

'eval(" User.includes(#{string}) ")'でも動作しますが、@ Jordanが言ったように、あなたは間違っています。あなたは、アプリケーションから内部形式のインクルードのリストを受け取って、そこにインクルードする_safelyリストを作成する必要があります。 – mudasobwa

+0

「ユーザー提出コード」の評価は非常に危険な作業です。最後に、このコードが実行されるサンドボックスの場所を考えてみましょう。 [Rubyの$ SAFEについてのこの記事を読む](http://stackoverflow.com/questions/169303/how-to-run-untrusted-ruby-code-inside-a-safe-sandbox) –

答えて

0

、解析がほぼ同じくらい簡潔かつ安全であるYAMLを使用します。

str = "address, { friends: [ address, followers ] }" 
args = YAML.load("[ #{str} ]") 
user = User.includes(*args) 
+0

これはエラーが発生しました - 文字列を参照できません – Shannon

+0

@Shannonもっと情報が必要です。あなたの正確なコードはどのように見えますか?文字列の正確な値は?エラーメッセージの全体は何ですか?それは私のためにうまく動作します:https://repl.it/FKpa –

+0

これまでのコードで投稿を更新しました – Shannon

関連する問題