найти step_id, которые принадлежат курсу? - PullRequest
0 голосов
/ 25 февраля 2012

Я пытаюсь написать функцию complete_steps_for_course (course) в моей модели User, которая находит все выполненные шаги для курса, который прошел пользователь.

Моя модель пользователя ниже, где я хочу, чтобы функция жила

class User < ActiveRecord::Base

  has_many :memberships, :dependent => :destroy
  has_many :groups, :through => :memberships
  has_many :enrolments, :through => :groups
  has_many :courses, :through => :enrolments
  has_many :completed_steps, :dependent => :destroy

  accepts_nested_attributes_for :memberships, :allow_destroy => true
  attr_accessible :email, :password, :password_confirmation, :memberships_attributes, :is_admin,
              :first_name, :last_name, :gender, :dob, :phone_number, :address, :city, :state, :postcode

  def started_course?(course)
    completed_steps_for_course(course).length > 0
  end

  def completed_steps_for_course(course)
    #step_in_course = Course.joins(:components => :steps).where("course_id = ?", course.id)
    #completed_steps.where("course_id = ?", course.id)
  end
end

Мои модели для курса, компонента и шага приведены ниже ...

class Course < ActiveRecord::Base
  has_many :components, :dependent => :destroy
  has_many :steps, :through => :components, :dependent => :destroy
end

class Component < ActiveRecord::Base
  belongs_to :course
  has_many :steps, :dependent => :destroy
end

class Step < ActiveRecord::Base
  belongs_to :component
end

Не могу понять, как должна выглядеть функция, помогите! Я понимаю, что это, вероятно, простой вопрос, но утренний кофе сегодня явно не помог.

РЕДАКТИРОВАТЬ У меня есть таблица, которая отслеживает выполненные действия для пользователя, как показано ниже ...

class CompletedStep < ActiveRecord::Base
  belongs_to :user
  belongs_to :step
  validates_presence_of :user, :step
  validates_uniqueness_of :step_id, :scope => 'user_id'
end

1 Ответ

1 голос
/ 25 февраля 2012
class User < ActiveRecord::Base
  #
  # .. other associations

  has_many :completed_steps, :dependent => :destroy do
    def for_course(course)
      joins(:step=> {:component => :course}).where("courses.id = ?", course)
    end
  end 
end

Теперь вы можете получить завершенные шаги для курса следующим образом:

current_user.completed_steps.for_course(c1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...