2013-06-27 3 views
2

Je viens de commencer Rails dev et j'ai une question sur la saisie de données dans un hachage sérialisé dans ma base de données à partir d'un URL avec un nombre variable de paramètres. J'essaie de comprendre comment implémenter une URL avec n'importe quel nombre de paramètres/valeurs dans le formulaire (action?1=.5&2=.6&3=.1 etc) que je veux ajouter à mon hash sérialisé. Si mon hash contient déjà des clés/valeurs précédemment stockées, comment puis-je en ajouter d'autres dans le même hachage? Je veux que toutes les données soient dans une colonne.Rails de hachage sérialisés

J'ai une méthode où je passe un objet modèle:

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 

Merci!

Répondre

1

Quelque chose comme ça peut-être?

cela devrait aller sur le contrôleur

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 

et quelque chose comme ceci dans votre méthode

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

En outre, il est préférable d'appeler object.save une fois que vous terminé la mise à jour du hachage et non pour chaque Clé entière

+1

Bien que cela soit bien intentionné, vous ignorez complètement comment analyser correctement les paramètres d'URL. Les deux parties doivent être codées de-'%'. 'Rack: Utils.parse_nested_query' et' CGI :: parse' feront tous les deux correctement sans avoir à réinventer la roue. – tadman

+0

Merci @tadman! Bon conseil. Ne connaissait pas CGI :: parse :) –

+0

'Rack :: Utils' gérera les paramètres imbriqués de style Rails, donc des choses comme' {'a' => {'b' => 'c'}} 'seront correctement encodé et décodé. – tadman