通過前幾天的例子,我們建立了自己的第一個blog網站,並實現了對數據庫的CRUD操作,初步瞭解了Rails的MVC架構,使用rails generate model命令生成model文件,並執行rails db:migrate命令在數據庫中創建相應的表;使用generate controller命令生成controller文件,在controller文件中編寫業務流的控制程序,同時爲了給用戶一個直觀的展示,我們需要編寫一些views。Rails內置了一些路由,目前我們暫時不需要自己手動編寫,使用rails默認的路由就可以實現想要的這些功能了。
前面我們是以article爲對象,完整的學習了對其新建、變更、刪除等的各種操作。那麼怎麼對已經發表的博客文章進行評論呢?今天我們就一起來學習一下。
首先,我們還是使用rails generate model命令來創建一個關於評論的model:
|
讓我們來看一下自動生成的model文件(app/models/comment.rb
),
|
發現,這與之前生成的Article的model文件稍微有些區別,就是多了一個belongs_to語句,這是因爲我們在執行命令的時候使用了article:reference參數,它的作用是在生成comment這個表的時候多了一列用來存放article id,時article和comment這兩個表關聯起來 。
然後,我們執行rails db:migrate命令,我們發現雖然在blog/db/migrate的路徑下面除了我們這次生成的文件之外,也包括前幾天我們生成的article相關的文件,但是在執行命令的時候,rails還是很聰明地只創建了comment這個表,因爲article表已經存在了。
現在,讓我們講article和comment兩個model進行關聯,對象與對象的關係可以是一對一,可以是一對多,也可以是多對多。而博客的文章與評論的關係應該是一對多的關係,我們在comment.rb文件中已經知道comment belongs_to :article;那麼在article.rb文件中如何來表示呢,我們使用語句has_many :comments。修改後的article.rb文件如下:
|
這樣我們就建立了article與comment之間的關係,假如我們使用一個實例變量@article表示一個文章,那麼就可以使用@article.comments來表示關於這篇文章的所有評論了。
給article添加路由的時候,我們是在blog/config/routes.rb文件中添加了這麼一句代碼:
resources :articles
由於comment與article的特殊關係,我們只需要把routes.rb文件變更如下便可以指定comment的路由了。
|
上述操作完成之後,讓我們來生成comment相關的controller,執行rails generate controller命令:
|
我們需要在展示article的頁面中加入comment相關的內容,現在讓我們講前幾天編寫的有關article的show.html.erb這個view修改如下:
|
當然,不要忘記在comment的controller中添加create方法,
|
啓動服務後程序執行如下:
點擊按鈕之後頁面: