2013-06-27 53 views
2

我剛剛開始Rails開發,並有一個關於從具有可變數量的參數的URL將數據輸入到數據庫的序列化哈希中的問題。我試圖找出如何實現一個URL的任何數量的參數/值的形式(action?1=.5&2=.6&3=.1等),我想添加到我的序列化哈希。如果我的散列已經有一些先前存儲的鍵/值,那麼我如何向同一個散列添加更多?我希望所有的數據都在一列中。序列化的哈希軌跡

我有一個方法,我將它傳遞模型對象:

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參數。這兩個部分都需要進行de-'%'編碼。 'Rack:Utils.parse_nested_query'和'CGI :: parse'都可以正確執行,而不必重新發明輪子。 – tadman

+0

謝謝@tadman!好的提示。不知道CGI :: parse :) –

+0

'Rack :: Utils'將處理Rails風格的嵌套參數,所以'{'a'=> {'b'=>'c'}}'將會正確編碼和解碼。 – tadman