Найти следующую и предыдущую записи, упорядоченные по рельсам столбцов положения - PullRequest
0 голосов
/ 09 марта 2011
>>  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">]

Мне нужно найти поле course_step, которое идет после идентификатора 9 (что происходит с course_step с идентификатором 10) (если оно существует)

Мне также нужно найти предыдущее (если оно существует)

Я знаю, что мог бы сделать это вручную, просматривая результаты, но я бы предпочел сделать это с помощью SQL.

СЛЕДУЮЩИЙ sql запрос будет:

SELECT * FROM course_steps WHERE position >=POSITION_OF_STEP ORDER BY position LIMIT 1 OFFSET 1 

ПРЕДЫДУЩИЙ sql запрос будет:

SELECT * FROM course_steps WHERE position <= POSITION_OF_STEP ORDER BY position DESC LIMIT 1 OFFSET 1

Я думаю, что понял!

1 Ответ

1 голос
/ 09 марта 2011
class CourseStep < ActiveRecord::Base
  belongs_to :step
  belongs_to :course

  validates_uniqueness_of :step_id, :scope => :course_id

  def next_step()
    Course.find(self.course.id).course_steps.order(:position).where("position >= ?", self.position).limit(1).offset(1).first
  end

  def previous_step()
     Course.find(self.course.id).course_steps.order("position DESC").where("position <= ?", self.position).limit(1).offset(1).first
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...