2012-06-20 3 views
0

Я пытаюсь разработать мое первое приложение для рельсов и, прежде чем перейти к реализации моих идей, я надеялся, что смогу помочь в планировании своей ассоциации.Планирование ассоциаций приложений Rails

Мое приложение будет образовательным инструментом, и у меня есть некоторые базовые функции, которые мне нужно реализовать. Я хочу иметь студентов, которые могут зарегистрироваться и создать курсы. В рамках этих курсов будет один пользователь, который является учителем, а остальные - учениками. В рамках курса будут выполняться задания, которые создает учитель, и что пользователи должны сделать заявку. Это основы. В конце концов, я хочу добавить больше функциональности, но на данный момент мне просто нужен набор оснований.

Вот мои идеи до сих пор о том, что ассоциации должны выглядеть следующим образом:

class User < ActiveRecord::Base 
    has_many :enrollments 
    has_many :courses, :through => :enrollments 
end 

class Course < ActiveRecord::Base 
    has_many :enrollments 
    has_many :users, :through => :enrollments 
end 

class Enrollment < ActiveRecord::Base 
    belongs_to :user  # foreign key - user_id 
    belongs_to :course # foreign key - course_id 
end 

Однако, я бегу в моей стене неопытности в данный момент с тем, как правильно обрабатывать остальную часть ассоциаций в эта точка. Возможно, я мог что-то взломать, но я предпочел бы сделать это как можно лучше в первый раз.

Как обращаться с ассоциациями, связанными с назначениями и представлениями? Предположительно, к ним должно относиться представление ученика, но оно также связано с назначением внутри класса. Задания начинаются в рамках курса, но также тесно связаны с пользователем.

И наконец, как лучше всего обращаться с отношениями между пользователем и классом, который они создают? Пользователь создает курс. Этот курс принадлежит им? Должен ли я просто добавить столбец в таблицу курса для хранения идентификатора создателя? И т.д.

Спасибо за помощь.

ответ

3

Возможно, вам захочется выделить модели для учителей и учеников, так как вы, вероятно, будете иметь разные действия, связанные с каждым (и, хотя у них есть некоторые атрибуты, они действительно разные объекты в вашей модели, для Например, вы, вероятно, хотите, чтобы преподаватель преподавал только один курс.) Вы можете получить как модель Учителя, так и модель Студента из модели пользователя, которая имеет общие атрибуты и аутентификацию.

Теперь вопросы:

Если вы хотите, чтобы студент, который создал курс, связанный, creator_id путь я бы. (Если преподаватель может также создать курс, получение ученика и учителя из общей модели пользователя поможет)

Задания и предложения: Вы в значительной степени определили его словами. Вот код. [Если разные студенты в рамках курса могут получить различные задания, только тогда вы хотите построить прямую связь между Студентом и уступкой, в противном случае, используйте через ассоциацию]

class User < ActiveRecord::Base 
    has_many :enrollments 
    has_many :courses, :through => :enrollments 
    has_many :assignments, :through => :courses 
    has_many :submissions 
end 

class Course < ActiveRecord::Base 
    has_many :enrollments 
    has_many :users, :through => :enrollments 
    has_many :assignments 
end 

class Enrollment < ActiveRecord::Base 
    belongs_to :user  # foreign key - user_id 
    belongs_to :course # foreign key - course_id 
end 

class Assignment < ActiveRecord::Base 
    belongs_to :course 
    has_many :submissions 
end 

class Submission < ActiveRecord::Base 
    belongs_to :assignment 
    belongs_to :user 
end 
+0

спасибо за предложение по разделению учителей и студенческая логика. Я обязательно посмотрю. Не могли бы вы указать мне на какие-либо ресурсы о том, как справиться с разделением учителя и учеников из модели пользователя. У меня уже есть модель пользователя, и было бы здорово просто вывести эту модель. И спасибо вам за ваш ответ в целом. – Mike

+0

Вы можете начать здесь: http://code.alexreisner.com/articles/single-table-inheritance-in-rails.html –

Смежные вопросы