문자열, 배열, 해시 등 다양한 데이터 형식의 "문자열로 제공되는"버전 인 일부 데이터 값이 있습니다. 원래 데이터에서 "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 %>
을 어떻게 데이터가 내가 가장 생략 한 (다시 온다 :
양식을 설정하는 방법 명확성을 위해 큰 배열의 값 중 하나).
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"}
_ "양식에서 오는 값"_ _ a HTML 양식? 웹 프레임 워크를 사용하고 있습니까? _ "객체에 저장하십시오."_ - 객체를 데이터베이스에서 어떻게 유지합니까? ORM 있어요? 또는 다른 말로 표현하자면 : Rails 질문입니까? – Stefan
@Stefan 네, 레일 질문입니다, 죄송 합니다만, 제가 언급 했어야합니다. 내가 편집 할게. –
그 양식의 예를 보여줄 수 있습니까? 특히 양식에 데이터를 전달하여 다시 서버로 보내는 방법. – Stefan