0
>> c = Course.find(3).course_steps.order(:position)
=> [#<CourseStep id: 9, step_id: 4, course_id: 3, position: 1, created_at: "2011-03-08 20:57:44", updated_at: "2011-03-08 20:57:44">, #<CourseStep id: 10, step_id: 5, course_id: 3, position: 2, created_at: "2011-03-08 20:57:45", updated_at: "2011-03-08 20:57:45">, #<CourseStep id: 8, step_id: 2, course_id: 3, position: 3, created_at: "2011-03-08 20:57:42", updated_at: "2011-03-08 20:57:42">]
Je dois trouver un course_step qui est après id 9 (qui se trouve être course_step avec id 10) (si elle est existe)Trouver Suivant et les enregistrements précédents commandés par des rails de colonne de position
Je dois aussi pour trouver la précédente (si elle existe)
Je sais que je pourrais le faire manuellement en bouclant les résultats, mais je préférerais le faire avec SQL.
La prochaine requête SQL serait:
SELECT * FROM course_steps WHERE position >=POSITION_OF_STEP ORDER BY position LIMIT 1 OFFSET 1
La requête SQL PRÉCÉDENT serait:
SELECT * FROM course_steps WHERE position <= POSITION_OF_STEP ORDER BY position DESC LIMIT 1 OFFSET 1
Je pense que je l'ai eu!
Votre code SQL n'est-il pas simplement suivi d'un seul CourseStep avec la position> = 1? Comment cela se traduit par une requête NEXT? –
Je suis juste en train de coder la position. Je voudrais avoir cette information dans le code –
On dirait que vous l'avez, mais il me semble que si vous voulez NEXT ou PREVIOUS vous voulez probablement> et = et <= dans la partie position de votre clause where. Vous pouvez également transformer cela en deux fonctions rubis très simples qui pourraient être plus propres. –