7.重構(gòu)
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的重構(gòu)
8.刪除留言
在實(shí)作時(shí),這邊一直出現(xiàn)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),
前者點(diǎn)擊新增的 "Destroy Comment" 連結(jié)將會(huì)送出一個(gè)DELETE /articles/:article_id/comments/:id的請(qǐng)求到CommentsController饲趋,而 controller 可以透過(guò)這個(gè)請(qǐng)求找到我們想刪除的留言拐揭。
所以,接著要去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])
一個(gè)是用create且comment_paeams堂污,
一個(gè)是用find且params[:id]
最後,再刪除一篇文章後龄砰,留言也會(huì)不見(jiàn)盟猖,所以得在model中,加入這行
has_many:comments, dependent::destroy
已清除留言佔(zhàn)資料的時(shí)間!
9.安全
目的是讓輸入者不輕易刪除文章或者進(jìn)入編輯的畫(huà)面换棚,
總結(jié)來(lái)說(shuō)式镐,可以設(shè)一個(gè)機(jī)制來(lái)控制,destroy,show,index,edit等
在controller加上這些代碼:
http_basic_authenticate_with name:"dhh", password:"secret",
except:?[:index,:show]
順帶一提固蚤,網(wǎng)路上有很多認(rèn)證的套件娘汞,像是Devise(目前我們使用),
總結(jié)來(lái)說(shuō)夕玩,實(shí)做文章你弦、留言板表單,原本覺(jué)得很複雜燎孟,但一步步拆解後禽作,其實(shí)覺(jué)得並不難,需要時(shí)間投入缤弦,
與耐心领迈,最後,附上自己的實(shí)作檔案在github上碍沐,
以便往後有機(jī)會(huì)可以查看。