0

我有班級人員和班級科目。目前他們根本沒有連接。作爲用戶,只能從列表中選擇主題並檢查它們。 現在我想允許用戶分配給主題,因此用戶類需要一個列表,可以存儲主題。 ...和一個表格,將科目映射到人員..(m到n)將對象列表(由我寫的類)添加到現有類

我對Ruby on Rails沒有太多經驗,當嘗試執行此操作時,我恐怕會銷燬我的應用程序。 到目前爲止,我發現有些命令可以做到這一點(例如$ rails generate migration AddSubjectsToPersons),但是我無法確切知道它們的作用,例如它觸及我的模型或控制器類。 如果是 - 是有沒有刪除我之前寫過的東西?如果不是 - 是否足以將名爲課程的字段(列表)添加到我的模型中,並且將自動檢測到與數據庫的連接?

回答

0

我使用命令rails generate migration CreatePersonsSubjects生成了一個遷移文件。名稱按字母順序排列(約定)。 該命令的結果是可以輸入代碼以更改數據庫表的框架。 這去了「向上」的一部分:

create_table :persons_subjects, :id => false do |t| 
     t.integer :person_id, :null => false 
     t.integer :subject_id, :null => false 
    end 

在這些動作可以被還原「向下」的一部分:

drop_table :persons_subjects 

最後,我在Person類添加一個字段(只有到了順便提一下,我們可以/也應該在主題上添加一條類似的路線)。這個名字也是慣例。

has_and_belongs_to_many :subjects 

受試者可以在視圖中使用,例如像這樣:

<div>Courses taken: 
    <ul> 
    <% @person.subjects.each do |subject| %> 
     <li><%= link_to subject.name, subject, :class => 'action' %></li> 
    <% end %> 
    </ul> 
</div> 
1

腳本rails generate migration創建一個遷移文件,其中包含所有用於在與rake db:migrate一起運行數據庫時處理數據庫的命令。
例如,您創建一個將外鍵添加到表並執行遷移的遷移。然後,您轉到您的模型並在兩個模型之間輸入正確的active_record參考(belongs_to,has_many)。這樣的步驟,如果您檢查控制檯rails console,並完成類似

user = User.find(1) 
user.subjects 

後,查詢應該工作完美無瑕。
所以基本上,遷移生成器腳本只是操縱數據庫。所有其他更改必須通過更改模型上的代碼來完成。

+0

命令創造了我移民了,但該文件幾乎是空的,它看起來好像我不得不寫我自己的表格定義。但是如何? 'create_table:users_lessons do | t | t.references:person t.references:subject end'?在http://guides.rubyonrails.org/migrations中,他們甚至沒有解釋這個t是什麼...... :(他們說:「引用助手並沒有爲你創建外鍵約束,你需要使用execute或者一個增加外鍵支持的插件。「我很困惑:( – chris

+0

)在你的遷移文件中,你必須按照一些約定手動輸入你的表定義。例如,如果你把'add_column:users,:subject_id,:integer ',這會在你的表上創建列,所以'active_record'可以使查詢成功。 – MurifoX

相關問題