2017-09-13 1 views
0

문자열, 배열, 해시 등 다양한 데이터 형식의 "문자열로 제공되는"버전 인 일부 데이터 값이 있습니다. 원래 데이터에서 "inspect"를 호출 한 결과입니다. 나는 그들을 다시 얻을 때Ruby에서 "eval"대신 안전한 방법으로 일부 문자열에서 "un-inspect"를 수행 했습니까?

, 난 원래 사전 검사 형태로 다시 객체로 저장하려면 -

분명히 등의 해시, 배열, 상징으로 즉, 난 그냥 "부를 수 eval "을 사용하지만이 데이터는 양식에서 가져온 것이므로"Bobby Tables "SQL 주입 또는"User.delete_all "과 같은 Ruby 호출 (예 : 경찰이 더 힘들 수 있습니다. 적어도 Rails에는 SQL 위생 처리). 사이트의 관리 섹션에 있으며 신뢰할 수있는 몇 명의 사용자 만이 사이트를 사용할 수 있지만 더 안전한 방법을 찾고 싶습니다.

더 세게 만들기 위해 Ruby 1.8.6과 Rails 2.2.2 (이것은 알지 못합니다!).

eval을 호출하지 않고 "inspect"메소드를 되돌릴 방법이 있습니까, 아니면 논리적으로 똑같은가요? 다음은 변환하려는 몇 가지 예제 값입니다.

"\"Instrument Home\"" => "Instrument Home" 
":foo" => :foo 
"[\"1311089\", \"1311128\", \"1310802\"]" => ["1311089", "1311128", "1310802"] 
"{:foo=>\"bar\"}" => {:foo => "bar"} 

편집 : 여기 내 양식이 어떻게 표시되는지를 보여줍니다 같은 :

<% @digilearning_module.metadata_keys_and_values.each do |num, hash| %> 
     <tr> 
     <td><%= text_field_tag "digilearning_module[metadata_keys_and_values][#{num}][key]", hash[:key].inspect %></td> 
     <td>=></td> 
     <td><%= text_area_tag "digilearning_module[metadata_keys_and_values][#{num}][value]", hash[:value].inspect %></td> 
     </tr> 
    <% end %> 

을 어떻게 데이터가 내가 가장 생략 한 (다시 온다 : enter image description here

양식을 설정하는 방법 명확성을 위해 큰 배열의 값 중 하나).

params[:digilearning_module][:metadata_keys_and_values] = { 
    "1"=>{"value"=>"[\"1311089\", \"1311128\", \"1310802\"]", "key"=>":tablet_compatible_child_mod_numbers"}, 
    "2"=>{"value"=>"\"Instrument Home\"", "key"=>":special_category"} 
} 

내가 처리 할 때 키와 분리 값을 해시로 구분하기 위해 숫자 만 버립니다. 그런 다음 다시 키와 실제로 DB에 저장되는 해시 값 등의 키와 데이터 값을 읽어 않으므로 위를 위해 당신이 필요하지 않은 경우

{:tablet_compatible_child_mod_numbers => ["1311089", "1311128", "1310802"], :special_category => "Instrument Home"} 
+1

_ "양식에서 오는 값"_ _ a HTML 양식? 웹 프레임 워크를 사용하고 있습니까? _ "객체에 저장하십시오."_ - 객체를 데이터베이스에서 어떻게 유지합니까? ORM 있어요? 또는 다른 말로 표현하자면 : Rails 질문입니까? – Stefan

+0

@Stefan 네, 레일 질문입니다, 죄송 합니다만, 제가 언급 했어야합니다. 내가 편집 할게. –

+0

그 양식의 예를 보여줄 수 있습니까? 특히 양식에 데이터를 전달하여 다시 서버로 보내는 방법. – Stefan

답변

2

와 끝까지 할 것 심볼 유형 인 경우 Stack Overlow에서 볼 수있는 인기있는 방법은 Ruby 객체 대신 JSON을 사용하는 것입니다. Ruby 객체와 JSON간에 매핑하고 JSON을 안전하게 인코딩 및 디코딩 할 수 있습니다.

+0

아, 좋은 생각, 고마워. 나는 상징이 필요하다. 그러나 나는 그것에 대처할 수 있을지 모른다. –

관련 문제