前言
在前面四篇學習筆記中肩豁,提到了article的新增脊串、建立、刪除清钥、編輯琼锋、顯示,接下來祟昭,
則是談到在每篇文章中缕坎,都有可以留言的功能,意味著一個文章可以有多篇留言篡悟,
簡單來說念赶,是一種階層關係,所以恰力,本篇就來討論叉谜,加入留言功能後,的實作流程踩萎。
6.Add a second model
首先在command line中輸入:
$ bin/rails generate model Comment commenter:string body:text article:references
關鍵在於停局,“article:references”,把model Article 與 model Comment做關聯(lián)香府,因此會在model/comment.rb
會看到這行“belongs_to:article”董栽,甚至在資料庫中還看到這行:
t.references:article, index:true
接著去,執(zhí)行migration動作企孩。
6.2關聯(lián)模型
在model Article中锭碳,加入有很多comments的指令
classArticle < ActiveRecord: :Base
has_many:comments
validates:title, presence:true,
length: { minimum:5}
end
接著去把Route加入與comment的連接,
resources: articles do
resources:comments
end
建立好model勿璃、資料庫擒抛、Route後推汽,接著往controller著手!
因為留言功能通常是在檢視玩文章歧沪,然後去留言板進行新增歹撒、刪除的功能,
所以不管是新增诊胞、刪除後暖夭,兩者執(zhí)行完,都得回到 article/show,html.erb的畫面撵孤,
因此迈着,在上述檔案中加入這些:
Add a comment:
<%= form_for([@article, @article.comments.build]) do |f| %>
<%= f.label :commenter %>
<%= f.text_field :commenter %>
<%= f.label :body %>
<%= f.text_area :body %>
<%= f.submit %>
<%?end?%>
在article新增一comment是透過Comment的controller中的creat action建立,
而這裡的form_for 使用到一個建立nest route的陣列邪码,就像articles/1/comments
於是在Comment controller加上
def create
@article=Article.find(params[:article_id])
@comment=@article.comment.create(comment_params)
redirect to article_path(@article)
end
private
? ?def comment_params
? ? ? ?params.require(:comment).permit(:commenter, :body)
? ?end
與Article controller對照
不僅是add comment裕菠,同時也得在view中顯示 comment的成果,
像是
Comments
<% @article.comments.each do |comment| %>
Commenter:
<%= comment.commenter %>
Comment:
<%= comment.body %>
<%?end?%>
最後可以完成霞扬,新增留言板糕韧、顯示留言板的功能枫振!
ps.有引用的喻圃,代表自己不熟悉的,得再反復琢磨粪滤。