2016-10-25 1 views
0

J'essaie de transmettre des valeurs entre des actions dans un contrôleur. Lorsque je place des valeurs dans l'action de l'expéditeur, elle renvoie une collection d'objets correctement. Mais quand je mets des valeurs à partir de l'action du récepteur, cela montre une chose différente.
j'ai rencontré ce problème quand j'ai essayé d'utiliser each pour récupérer tous les objets de la collectionRails: Comment fonctionne la session dans cette situation?

example_controller.rb

def query 
    @results = Result.all 
    session[:results] = @results 
    puts session[:results] 
end 

def print 
    @receiver = session[:results] 
    puts @receiver 
end 

Résultats: 0x007fdc8b96b0a8
Résultats: 0x007fdc8b96af68
Résultats: 0x007fdc8b96adb0
Résultats : 0x007fdc8b96ac70

{"id" => 9, "e_comp" => "109", "e_num" => "ccc"}
{"id" => 11, "e_comp" => "111", "e_num" = > "bbb"}
{"id" => 12, "e_comp" => "112", "e_num" => "ddd"}
{"id" => 15, "e_comp" => "115" , "e_num" => "KKK"}

si j'essaie @receivers.each {|r| r.e_comp}, il affichera une erreur

NoMethodError (méthode non définie e_comp » pour Hash: 0x007fdc8b96b0a8)

Que se passe-t-il à l'intérieur des rails? pourquoi la session tourne-t-elle à un autre format?

+0

pouvez-vous poster plus de code lié à ce problème - ce qui est dans le bloc each do? – David

+0

@ henners66 Merci de voir le code mis à jour –

Répondre

0

Essayez:

@receivers.each {|r| r["e_comp"]} 

Sans s dans votre méthode du contrôleur d'impression. Cela ressemble à une faute de frappe.

2

Vous ne devez pas stocker d'objets complexes ou actifs d'enregistrement à la session. Les objets ActiveRecord peuvent changer leurs attributs, ce qui déclenchera probablement une exception.

De même, il n'est pas recommandé de stocker des tableaux de longueur indéfinie en session. Prenez en compte que la taille de la mémoire de la session est de 4 Ko seulement.

Pour votre exemple, vous pouvez stocker les ID des résultats dans la session, puis les récupérer en interrogeant la base de données dans la méthode d'impression.