7.重構
app/views/comments/_comment.html.erb
app/views/comments/_form.html.erb
兩行程式碼,
前者代表:顯示comment部分:
Comments
<%= render @article.comments %>
後者代表:add comment
Add a comment:
<%= render 'comments/form' %>
comments/form代表comment folder 路徑下的file
最後就完成,render的重構
8.刪除留言
在實作時,這邊一直出現bug,原因在於我一直在view/article/show.html.erb做,
但是真正的要在view/comments/_comment.html.erb裡做
要打入以下這行
<%= link_to 'Destroy Comment', [comment.article, comment],
method: :delete,
data: { confirm: 'Are you sure?' } %>
與article的刪除有差別
<%= link_to 'Destroy', article_path(article), method: :delete,data:{confirm:'Are u sure?' } %>
差別在於[comment.article, comment] 與 article_path(article),
前者點擊新增的 "Destroy Comment" 連結將會送出一個DELETE /articles/:article_id/comments/:id的請求到CommentsController,而 controller 可以透過這個請求找到我們想刪除的留言。
所以,接著要去CommentController中,增加action :destroy
def destroy
@article=Article.find(params[:article_id])
@comment= @article.comment.find(params[:id])
redirect_to article_path(@article)
end
跟action create差別
@comment=@article.comments.create(comment_params)
@comment=@article.comments.find(params[:id])
一個是用create且comment_paeams,
一個是用find且params[:id]
最後,再刪除一篇文章後,留言也會不見,所以得在model中,加入這行
has_many:comments, dependent::destroy
已清除留言佔資料的時間!
9.安全
目的是讓輸入者不輕易刪除文章或者進入編輯的畫面,
總結來說,可以設一個機制來控制,destroy,show,index,edit等
在controller加上這些代碼:
http_basic_authenticate_with name:"dhh", password:"secret",
except: [:index,:show]
順帶一提,網路上有很多認證的套件,像是Devise(目前我們使用),
總結來說,實做文章、留言板表單,原本覺得很複雜,但一步步拆解後,其實覺得並不難,需要時間投入,
與耐心,最後,附上自己的實作檔案在github上,
以便往後有機會可以查看。