繼Ruby on rails體驗一和體驗二中的內容,此節將體驗二中最開始的目標來實現,體驗二中已經將部門添加的部分添加到了公司的show頁面,剩下的部分是將部門列表也添加到公司的顯示頁面,整體思路和體驗二中相同,但是還是會有點小問題,下面看具體實現。
重要文章閱讀:Ruby入門--Linux/Windows下的安裝、代碼開發及Rails實戰 http://www.linuxidc.com/Linux/2014-04/100242.htm
Ruby on rails初體驗系列文章:
http://www.linuxidc.com/Linux/2014-04/100245.htm
http://www.linuxidc.com/Linux/2014-04/100246.htm
http://www.linuxidc.com/Linux/2014-04/100247.htm
將app/views/departments/index.html.erb復制到app/views/companies/_department_list.html.erb,在company的show.html.erb頁面模版中添加如下代碼:
1 <%= render :partial => "department_list" %>
company的show.html.erb頁面模板如下:
浏覽頁面出現如下問題,跟昨天的問題一樣,因為變更了控制器,@department實例變量沒有初始化,需要添加一個局部變量。
1 <%= render :partial => "department_list", :locals => { :departments => Department.find(:all)}%>
將_department_list.html.erb中循環的實例變量改為局部變量:
1 <% departments.each do |department| %>
大概就是這個樣子,但是有2個問題:
1:在添加部門的頁面中,沒有必要填寫cid,因為在公司信息界面cid信息已經存在。
2:公司現實頁面的部門列表中的部門有部分不是屬於此公司的,
以為我們查找部門的時候是查找的全部。
下面解決這兩個問題:
1:將_new_department.html.erb中的CID的輸入框去掉就好。
2:這個麻煩一點,需要有幾部完成這個操作:
第一步:我們給Company賦予名為departments的額外屬性,我們需要在Company模型代碼裡定義這個關系:
1 class Company < ActiveRecord::Base 2 has_many :departments 3 end
第二步:將company/show.html.erb中關於傳遞:department局部變量的方法改為如下方式:
1 <%= render :partial => "department_list", :locals => { :departments => @company.departments}%>
查案結果,發現錯誤:
原來ror的主外鍵關系是通過約定表列的名字來將數據連接起來的,將department中的cid改為company_id,改完之後要將對應的模板中的對應標記進行修改後查看結果正確。