2012-07-19 105 views
0

我有兩個型號,像這樣創建模型之間的關係。 Rails 3中

class User < ActiveRecord::Base 

    attr_accessible :email, :password, :password_confirmation, :remember_me, :fname, :lname 
end 

class Course < ActiveRecord::Base 

    belongs_to :university 
    attr_accessible :course_code, :department, :name, :path, :university_code, :department_code 

set_primary_key :course_code 
end 

現在用戶可以採取很多課程和一門課程可以有許多用戶。此外,連接表將具有某些屬性,例如用戶當前正在使用的狀態,他可能已完成的演講等。

如何創建關係?

+0

這個問題有點不清楚,究竟是什麼問題?如果在用戶模型中定義了has_many:routes(並注意複數形式),並且在課程模型中定義了belongs_to:user,並且您將獲得相當標準的訪問器和映射。然而,從我在你的問題中可以理解的事情看來,你似乎需要一個每用戶課程的中間模型(數據庫中的課程是獨一無二的,還是你想爲N個用戶複製它)?有關用戶在特定課程上做了什麼的信息。請解釋您確實需要什麼,我們可能會幫助您。 – Doodloo 2012-07-19 01:21:39

+0

在'UserCourseResult'中編輯我的問題 – 2012-07-19 01:26:22

回答

2

如果課程具有「唯一性」概念,那麼您需要一箇中間模型(例如UserCourseResults),因此在任何給定的數據庫狀態下,每個課程都可以是唯一的。然後,您只需按如下方式組織:

User: 
    has_many :user_course_results 
    has_many :courses, through: user_course_results 
Course: 
    has_many: :user_course_results 
    has_many: :users, through: user_course_results 
UserCourseResult: 
    attr_accessible :result # So each user can have a result on each course, for instance. 
    belongs_to :user 
    belongs_to: :course 

您是否看到中間模型的要點?

HTH,

Pierre。

編輯:我剛剛看到你的編輯,我想這正是你的想法。您必須記住,用戶模型只保存每個用戶唯一的數據,對於課程模型也是如此。所以最好的可能是擁有這個中間的「UserCourseResult」模型,它可以容納任何用戶課程特定的數據...... 這種關係當你不需要中間數據時,除了用戶和課程之間的鏈接,被稱爲HABTM(已經屬於很多)。您應該查看活動記錄文檔中的特定部分(請參閱has_many:through => *和has_and_belongs_to_many)。

+0

我認爲':course_id'和':user_id'也應該是'attr_accessible' – 2012-07-19 01:30:54

+0

是的,我只在UserCourseModel上添加了attr_accessible,所以你可以理解數據會在哪裏到用戶課程結果。 – Doodloo 2012-07-19 01:35:37

+1

另外,它取決於你想要的行爲,你是否要改變一個用戶被分配到另一個用戶的課程?如果關係表不會通過Web瀏覽器的表單分配,那麼您不需要將attr_accessible放在user_id和course_id上​​。 – Doodloo 2012-07-19 01:39:26

相關問題