2015-04-12 59 views
1

我一直在玩弄寫一個回報率4.2應用程序,將允許下列行爲:如何爲會議註冊應用程序設置我的模型關聯?

  1. 管理員用戶創建的會議課程列表將包括題目,說明等
  2. 會議的與會者可以在網站註冊,然後選擇他們想參加的會議課程。
  3. 與會者不應該能夠創建會議課程,只能從數據庫中列出的課程列表中選擇並選擇他們參加。這必須是一種將許多用戶關聯到同一課程的方法。
  4. 當用戶選擇一個課程,則該過程中的座位容量應遞減(該溶液的這一方面的細節在當時的二次要求)

爲了討論起見,讓我們說我正在使用Devise和用戶角色,都已經想清楚和配置。所以我有一個user.rb模型/表。 我還創建了一個名爲course.rb的模型/表。 我創建了一個名爲course_selection.rb的連接模型/表。

我通過協會配置使用的has_many這些表與連接表屬於每個像這樣:

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

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

class CourseSelection < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :course 
end 

我有這樣的設置和我能夠創建新用戶,但與非管理員用戶角色能夠創建課程(但我沒有爲這些用戶設置任何種類的基於角色的排除,以防止他們創建課程)。當我調用RESTful路線時,例如 http://localhost:3000/users/3/courses 我期待只看到與此特定用戶關聯的課程列表。相反,我看到數據庫中列出的所有課程。

我的問題是:

  1. 我能所選擇的模型關聯的策略來完成我指定的行爲目標是什麼?
  2. 如何設置控制器以便建立用戶的課程選擇,但他們沒有使用新的/創建方法來實際創建課程?
  3. 如何設置表單(我正在使用simple_form)以允許用戶從現有課程列表中進行選擇?

感謝您的幫助。我還沒有找到任何似乎解決這個挑戰的教程。

回答

1

我所選擇的模型關聯策略可以用來完成我指定的行爲目標嗎?

是的,這些模型是一個好的開始。

控制器將如何設置,以便建立用戶的課程選擇,但他們沒有使用新的/創建方法來實際創建課程?

典型的Rails類似REST的方法是擁有一個管理關聯的控制器CourseSelectionsController

假設您有一個用戶可以選擇課程的視圖頁面。該視圖將數據提交給CourseSelectionsController,參數爲user_idcourse_id。然後控制器創建CourseSelection模型,該模型將用戶和課程相關聯。

CourseSelectionsController對「創建」,「讀取」,「刪除」具有典型的操作。如果課程選擇還包含其他數據,例如價格或時間段等,則可以有「更新」操作。

順便說一下,在你的應用中,中間模型通常被稱爲Enrollment而不是CourseSelection,而REST控制器被稱爲EnrollmentsController

如何設置表單(我正在使用simple_form)以允許用戶從現有課程列表中進行選擇?

通常在app/views/course_selections。該表格基於CourseSelections(不是用戶,而不是課程)。該表格顯示了一系列課程。當用戶提交表單時,它會向CourseSelectionsController執行PUT(或POST)。

如果您希望表單能夠處理多個課程,一種方法是使用AJAX,因爲每個課程都被選中或取消選中。另一種方法是使用多個選擇字段,並製作一個控制器方法,可以迭代所有選定/未選定的課程。

+0

謝謝。這很有道理!我會試試這個,讓你知道我是怎麼做的。 –

+0

這些信息提供了我的問題的答案。非常感激! –