2013-06-27 3 views
2

방금 ​​레일스 dev를 시작했고 데이터베이스에 serialize 된 해시에 데이터를 입력하는 것에 대한 질문을 params 변수 번호가있는 url에서 가져 왔습니다. 어떻게 직렬화 된 해시에 추가 할 양식 (action?1=.5&2=.6&3=.1 등)의 매개 변수/값의 모든 번호와 함께 URL을 구현하는 방법을 알아 내려는 중입니다. 내 해시에 이전에 저장된 일부 키/값이 이미있는 경우 동일한 해시를 추가하려면 어떻게해야합니까? 모든 데이터를 하나의 열에 넣기를 원합니다.일련 화 된 해시 레일

def add_data_to_hash(obj) 
    params.each do |key, value| 
    if (key.to_i.is_a?(Integer) && key.to_i != 0) then 
     obj.hash[key] = value 
     obj.save 
    end 
    end 
end 

감사 : 나는 그것을 모델 개체를 전달할 곳

나는 방법이있다!

답변

1

어쩌면 이런가?

이 당신의 방법 안에이 같은 컨트롤러

new_values = {} 
url = request.fullpath.split("?").last 
url.split("&").each do |kv| 
    pair = kv.split("=") 
    new_values[pair[0].to_i] = pair[1] 
end 
new_value.delete 0 

을 무언가에 가야

new_values.each do |k,v| 
    object.hash[k] = v 
end 
object.save 

당신이 모든에 대한 해시를 업데이트하지 완료되면 또한 object.save 전화를하는 것이 좋습니다 정수 키 :)

+1

이것은 의도적이지만 URL 매개 변수를 올바르게 구문 분석하는 방법을 완전히 무시하고 있습니다. 두 부분 모두'-'로 인코딩되어야합니다. 'Rack : Utils.parse_nested_query'와'CGI :: parse'는 바퀴를 다시 발명하지 않아도 제대로 작동합니다. – tadman

+0

Thanks @tadman! 멋진 팁. CGI :: parse를 모른다 : –

+0

'Rack :: Utils'는 Rails 스타일의 중첩 된 매개 변수를 처리 할 것이므로'{ 'a'=> { 'b'=> 'c'}}'와 같은 것들이 적절하게 될 것이다. 인코딩 및 디코딩. – tadman

관련 문제