允許在軌道上的紅寶石上發(fā)表評論
01
的07
允許注釋
在之前的迭代中,添加RESTful身份驗證,身份驗證已添加到您的博客中,因此只有授權用戶才能創(chuàng)建博客帖子。此迭代將添加博客教程的最后(和主要)功能:評論。在完成本教程后,用戶可以在博客文章上發(fā)布匿名評論而無需登錄。
02
of 07
支架注釋
創(chuàng)建注釋數(shù)據(jù)庫表和控制器的過程與創(chuàng)建帖子數(shù)據(jù)庫表和控制器的方式相同-使用scaffold生成器。腳手架生成器將創(chuàng)建RESTful控制器,映射路線并創(chuàng)建數(shù)據(jù)庫遷移。但在您接受此操作之前,您必須考慮評論是什么以及其數(shù)據(jù)成員將是什么。評論有:
- 姓名(必填字段):評論者的姓名為字符串。
- 電子郵件(可選字段):評論者的電子郵件為字符串。
- 正文(必填字段):評論正文為文本。
- 帖子:這將評論與特定博客帖子相關聯(lián)。這是具有多個和屬于關聯(lián)所必需的。
一旦你've決定了什么評論's數(shù)據(jù)成員是,你可以運行腳手架生成器。請注意,帖子字段的類型為"references。#34;這是一種特殊類型,它將生成一個ID字段,通過外鍵將注釋表與帖子表鏈接起來。
$腳本/生成支架注釋姓名:字符串電子郵件:字符串正文:文本發(fā)布:參考文獻
存在應用程序/模型/
存在應用程序/控制器/
存在應用程序/助手/
。。。剪斷。。。
一旦生成控制器和遷移,您就可以可以通過運行db:migrate rake任務繼續(xù)運行遷移。
$rake db:migrate
==20080724173258 create comments:migrating====
-創(chuàng)建表(:注釋)
->0.0255s
==20080724173258 CreateComments:已遷移(0.0305s)
03
of 07
設置模型
數(shù)據(jù)庫表到位后,您可以開始設置模型。在模型中,諸如數(shù)據(jù)驗證之類的事情-確保存在必填字段-并且可以定義關系。將使用兩種關系。
博客文章有很多評論。has?many關系不需要't需要帖子表中的任何特殊字段,但注釋表有一個帖子id將其鏈接到帖子表。從軌道上,你可以說110件事@發(fā)布獲取屬于@post對象的注釋對象列表。注釋在其父發(fā)布對象上也依賴于。如果帖子對象被銷毀,則所有子注釋對象也應銷毀。
評論屬于post對象。評論只能與單個博客文章相關聯(lián)。屬于關系只需要一個post_id字段位于注釋表中。要訪問評論'父發(fā)布對象,可以說@評論在軌道上。
以下是帖子和評論模型。已將多個驗證添加到注釋模型中,以確保用戶填寫必填字段。還要注意,這個關系屬于關系。
#文件:應用程序/模型/后rb
class Post
有很多:評論,:依賴=>:銷毀
結束
#文件:應用程序/模型/評論
class Comment
屬于:post
驗證_存在_of:name
驗證_長度_of:name,:within=>2..20
驗證_存在_of:body
end
04
of 07
準備注釋控制器
注釋控制器不會以使用RESTful控制器的傳統(tǒng)方式使用。首先,它將僅從帖子視圖訪問。評論表單和顯示完全在Post controller的顯示操作中。因此,首先,刪除整個app/view/comments目錄以刪除所有評論視圖。他們贏得了'不需要。
接下來,您需要從注釋控制器中刪除一些操作。所有需要的's是create和destrow操作。所有其他操作都可以刪除。由于注釋控制器現(xiàn)在只是一個沒有視圖的短柱,因此您必須更改控制器中嘗試重定向到注釋控制器的幾個位置。只要有重定向調用,請將其更改為重定向到(@評論)。以下是完整的注釋控制器。
#文件:應用程序/控制器/注釋_controler.rb
類評論控制器和lt;應用控制器
def create
@comment=評論(params[:comment])
如果@評論。保存
;flash[:note]='已成功創(chuàng)建注釋。'
重定向到(@評論)
其他
閃光[:note]="錯誤創(chuàng)建評論:#{@評論。錯誤}"
(@評論)
end
end
def destruct
@comment=評論(params[:id])
@評論皮膚保養(yǎng)常識。銷毀
(@評論)
end
end
05
of 07
注釋表格
最后要實施的部分之一是評論表單,這實際上是一項相當簡單的任務?;旧嫌袃杉乱觯涸谔涌刂破鞯娘@示操作中創(chuàng)建一個新的注釋對象,并顯示一個提交給Commen的創(chuàng)建操作的表單ts控制器。為此,請修改帖子控制器中的顯示操作,如下所示。添加的行以粗體顯示。
#文件:應用程序/控制器/帖子_controler.rb
#GET/posts/1
#GET/posts/1.xml
def show
@post=發(fā)現(xiàn)(參數(shù)[:id])
@評論=評論(:post=>@post)
顯示注釋表單與任何其他表單相同。將其放在帖子控制器中顯示操作的視圖底部。
06
of 07
顯示注釋
最后一步是實際顯示評論。顯示用戶輸入數(shù)據(jù)時必須小心,因為用戶可能會嘗試插入可能破壞頁面的HTML標簽。為防止這種情況,使用h方法。此方法將逃脫用戶嘗試輸入的任何HTML標簽。在進一步的迭代中,可以應用諸如紅布或過濾方法的標記語言以允許用戶發(fā)布某些HTML標簽。
評論將顯示為部分,就像帖子一樣。創(chuàng)建一個名為233 app/views/posts的文件/_comment.html.erb并將以下文本放入其中。它將顯示注釋,如果用戶登錄并可以刪除注釋,還將顯示銷毀鏈接以銷毀注釋。
說:
:確認=>'你確定嗎?',
:方法=>:如果登錄則刪除?%>
最后,要一次顯示所有的帖子's注釋,請使用調用注釋部分:collection=>@發(fā)布。對于屬于帖子的每個評論,這將稱評論為部分評論。將以下行添加到帖子控制器中的顯示視圖中。
'評論',:集合=>@發(fā)布%>
一個是完成,一個功能齊全的評論系統(tǒng)被實現(xiàn)。
07
257 of 07 258261>Next迭代在下一個教程迭代中,簡單的U格式將被稱為紅布的更復雜的格式引擎取代。RedCloth允許用戶使用簡單的標記創(chuàng)建內容,例如*粗體*,斜體為斜體。這將適用于博客海報和評論者。