Liste en session trié par drag and drop qu i ne sauve pas les positions

Je commence par un hs : je tire mon chapeau à la team hot spot du
concours railrumble !

bonjour a tous j’ai besoin d’un coup de pouce pour une petite partie
de mon api qui me tien en échec depuis trop longtemps.

j’ai une liste d’objet en session, premier probleme il est issue de
pas mal de migrations desmigrations, et des fois par flemme j’ai edité
les champs avec myAdmind donc je me demande si rails finit pas par
perdre le fil et ne plus savoir si un champ existe ou pas.

est il possible de lister les attributs d’un objet ?

je fais court pour la situation des objets
formulaire contient des questions, le formulaire est dans une session,
le champ ordre attribut de question (int) contient les positions des
question

une session garde une collection de ses objet et l’affiche sous cette
forme
dans le controller @questions = session[:formulaire.questions]
la vue

    <% for question in @questions %>
  • question.label %>
  • <% end %>
et son java <%= sortable_element 'questions-list', :url => {:controller => :question, :action => 'sort'} %>

enfin l’appel a sort

for question in session[:formulaire].questions
question.ordrequestion = params[‘questions-list’][question.id.to_i -
1]
end

mais voila ça marche pas…
les tests
si dans n’importe qu’elle autre page je demande la session et que je
liste les questions et leur ordre => nil a chaque ligne
j’ai essayé de créer un autre attribut en migration bien propre nomé
questionordre le problème persiste.
j’ai essayé de mettre a jour le champ ordre et questionordre dans une
autre méthode (celle qui mettais a jour d’autre champs de questions)
et bien ca ne marche pas non plus alors que les autres champ étaient
mis à jour.
pas d’autres idées.

alternative451 a écrit :

est il possible de lister les attributs d’un objet ?

Oui,

Model#attributes

<% for question in @questions %>

j’ai essayé de mettre a jour le champ ordre et questionordre dans une
autre méthode (celle qui mettais a jour d’autre champs de questions)
et bien ca ne marche pas non plus alors que les autres champ étaient
mis à jour.
pas d’autres idées.

Quel est ton type “question” ? En effet, tu appelles des méthodes
dessus, mais on ne connait pas cet objet.


Cyril M.

OoOoo joie !
et bien vous saviez vous que les attributs d’un objet de session ne se
modifient pas avec une simple opération d’égalité ?
dans ma configuration actuelle
session[:unObjet].unAttribut = ‘une modification’ ne prend pas effet
hors de la méthode. comme si on reste en passage en copie au lieu
d’une référence.
par contre
session[:unObjet].update_attribute(:unAttribut => ‘une
modification’ ) prends effet
c’est beau de découvrir un langage.
désolé du dérangement. mais peut être cela peut être utile à certains

On m’a toujours dit de me méfier des modèles ActiveRecord en session,
voir :

A priori il vaut mieux stocker l’ID :
session[:user] = @user.id
Et en cas de besoin, récupérer l’object (modulo les tests qui vont bien)
:
@user = User.find(session[:user])
Ensuite ne manipuler que @user, ce qui aurait sans doute évité le
problème
que tu as rencontré.

Si je fais fausse route, n’hésitez pas à me corriger.

Cdt,

Jean-Baptiste

Le 30 août 2009 23:34, alternative451 [email protected] a écrit
:

Au contraire, tu as raison. J’ajouterai même dans le
ApplicationController :

helper_method :user

def user
@user ||= User.find(session[:user])
end

def user= id
@user = User.find(session[:user] = id)
end

Comme ça pas besoin de répéter des session[:user] et des User.find, on
sait
où stocker l’id user, on sait où chercher l’user en cours, les vues
n’ont
pas besoin de faire leurs find elles-même (pas bô) et quand on change
l’id
on change l’user qui va avec.

Michel B.

2009/8/31 Jean-Baptiste B. [email protected]

juste un soucis, l’objet n’est pas toujours stocké dans la base, il y
a un mode création divisé en plusieurs pages, et création à la fin. et
en mode édition, l’objet est dans la base, et là votre explication
s’applique.
Alors est il mieux de stocker directement pendant les étapes de la
création et de supprimer si la création n’est pas achevé ou de garder
en session

Model#attributeshttp://api.rubyonrails.org/classes/ActiveRecord/Base.html#M002348

Merci

Quel est ton type “question” ? En effet, tu appelles des méthodes
dessus, mais on ne connait pas cet objet.

question est un objet assez simple, il contient quelques primitif de
type string et son champ ordre qui est un integer