允許在軌道上的紅寶石上發(fā)表評(píng)論

01

的07

允許注釋

在戶外在位置上博客

在之前的迭代中,添加RESTful身份驗(yàn)證,身份驗(yàn)證已添加到您的博客中,因此只有授權(quán)用戶才能創(chuàng)建博客帖子。此迭代將添加博客教程的最后(和主要)功能:評(píng)論。在完成本教程后,用戶可以在博客文章上發(fā)布匿名評(píng)論而無需登錄。

02

of 07

支架注釋

創(chuàng)建注釋數(shù)據(jù)庫表和控制器的過程與創(chuàng)建帖子數(shù)據(jù)庫表和控制器的方式相同-使用scaffold生成器。腳手架生成器將創(chuàng)建RESTful控制器,映射路線并創(chuàng)建數(shù)據(jù)庫遷移。但在您接受此操作之前,您必須考慮評(píng)論是什么以及其數(shù)據(jù)成員將是什么。評(píng)論有:

  • 姓名(必填字段):評(píng)論者的姓名為字符串。
  • 電子郵件(可選字段):評(píng)論者的電子郵件為字符串。
  • 正文(必填字段):評(píng)論正文為文本。
  • 帖子:這將評(píng)論與特定博客帖子相關(guān)聯(lián)。這是具有多個(gè)屬于關(guān)聯(lián)所必需的。

一旦你've決定了什么評(píng)論's數(shù)據(jù)成員是,你可以運(yùn)行腳手架生成器。請(qǐng)注意,帖子字段的類型為"references。&##34;這是一種特殊類型,它將生成一個(gè)ID字段,通過外鍵將注釋表與帖子表鏈接起來。

$腳本/生成支架注釋姓名:字符串電子郵件:字符串正文:文本發(fā)布:參考文獻(xiàn)
存在應(yīng)用程序/模型/
存在應(yīng)用程序/控制器/
存在應(yīng)用程序/助手/
。。。剪斷。。。

一旦生成控制器和遷移,您就可以可以通過運(yùn)行db:migrate rake任務(wù)繼續(xù)運(yùn)行遷移。

$rake db:migrate
==20080724173258 create comments:migrating====
-創(chuàng)建表(:注釋)
->0.0255s
==20080724173258 CreateComments:已遷移(0.0305s)

03

of 07

設(shè)置模型

數(shù)據(jù)庫表到位后,您可以開始設(shè)置模型。在模型中,諸如數(shù)據(jù)驗(yàn)證之類的事情-確保存在必填字段-并且可以定義關(guān)系。將使用兩種關(guān)系。

博客文章有很多評(píng)論。has?many關(guān)系不需要't需要帖子表中的任何特殊字段,但注釋表有一個(gè)帖子id將其鏈接到帖子表。從軌道上,你可以說110件事@發(fā)布獲取屬于@post對(duì)象的注釋對(duì)象列表。注釋在其父發(fā)布對(duì)象上也依賴于。如果帖子對(duì)象被銷毀,則所有子注釋對(duì)象也應(yīng)銷毀。

評(píng)論屬于post對(duì)象。評(píng)論只能與單個(gè)博客文章相關(guān)聯(lián)。屬于關(guān)系只需要一個(gè)post_id字段位于注釋表中。要訪問評(píng)論'父發(fā)布對(duì)象,可以說@評(píng)論在軌道上。

以下是帖子和評(píng)論模型。已將多個(gè)驗(yàn)證添加到注釋模型中,以確保用戶填寫必填字段。還要注意,這個(gè)關(guān)系屬于關(guān)系。

#文件:應(yīng)用程序/模型/后rb
class Post
有很多:評(píng)論,:依賴=>:銷毀
結(jié)束
#文件:應(yīng)用程序/模型/評(píng)論
class Comment
屬于:post
驗(yàn)證_存在_of:name
驗(yàn)證_長(zhǎng)度_of:name,:within=>2..20
驗(yàn)證_存在_of:body
end

04

of 07

準(zhǔn)備注釋控制器

注釋控制器不會(huì)以使用RESTful控制器的傳統(tǒng)方式使用。首先,它將僅從帖子視圖訪問。評(píng)論表單和顯示完全在Post controller的顯示操作中。因此,首先,刪除整個(gè)app/view/comments目錄以刪除所有評(píng)論視圖。他們贏得了'不需要。

接下來,您需要從注釋控制器中刪除一些操作。所有需要的's是createdestrow操作。所有其他操作都可以刪除。由于注釋控制器現(xiàn)在只是一個(gè)沒有視圖的短柱,因此您必須更改控制器中嘗試重定向到注釋控制器的幾個(gè)位置。只要有重定向調(diào)用,請(qǐng)將其更改為重定向到(@評(píng)論)。以下是完整的注釋控制器。

#文件:應(yīng)用程序/控制器/注釋_controler.rb
類評(píng)論控制器和lt;應(yīng)用控制器
def create
@comment=評(píng)論(params[:comment])
如果@評(píng)論。保存
;flash[:note]='已成功創(chuàng)建注釋。'
重定向到(@評(píng)論)
其他
閃光[:note]="錯(cuò)誤創(chuàng)建評(píng)論:#{@評(píng)論。錯(cuò)誤}"
(@評(píng)論)
end
end
def destruct
@comment=評(píng)論(params[:id])
@評(píng)論皮膚保養(yǎng)常識(shí)。銷毀
(@評(píng)論)
end
end

05

of 07

注釋表格

最后要實(shí)施的部分之一是評(píng)論表單,這實(shí)際上是一項(xiàng)相當(dāng)簡(jiǎn)單的任務(wù)?;旧嫌袃杉乱觯涸谔涌刂破鞯娘@示操作中創(chuàng)建一個(gè)新的注釋對(duì)象,并顯示一個(gè)提交給Commen的創(chuàng)建操作的表單ts控制器。為此,請(qǐng)修改帖子控制器中的顯示操作,如下所示。添加的行以粗體顯示。

#文件:應(yīng)用程序/控制器/帖子_controler.rb
#GET/posts/1
#GET/posts/1.xml
def show
@post=發(fā)現(xiàn)(參數(shù)[:id])
@評(píng)論=評(píng)論(:post=>@post)

顯示注釋表單與任何其他表單相同。將其放在帖子控制器中顯示操作的視圖底部。

06

of 07

顯示注釋

最后一步是實(shí)際顯示評(píng)論。顯示用戶輸入數(shù)據(jù)時(shí)必須小心,因?yàn)橛脩艨赡軙?huì)嘗試插入可能破壞頁面的HTML標(biāo)簽。為防止這種情況,使用h方法。此方法將逃脫用戶嘗試輸入的任何HTML標(biāo)簽。在進(jìn)一步的迭代中,可以應(yīng)用諸如紅布或過濾方法的標(biāo)記語言以允許用戶發(fā)布某些HTML標(biāo)簽。

評(píng)論將顯示為部分,就像帖子一樣。創(chuàng)建一個(gè)名為233 app/views/posts的文件/_comment.html.erb并將以下文本放入其中。它將顯示注釋,如果用戶登錄并可以刪除注釋,還將顯示銷毀鏈接以銷毀注釋。


說:
:確認(rèn)=>'你確定嗎?',
:方法=>:如果登錄則刪除?%>

最后,要一次顯示所有的帖子's注釋,請(qǐng)使用調(diào)用注釋部分:collection=>@發(fā)布。對(duì)于屬于帖子的每個(gè)評(píng)論,這將稱評(píng)論為部分評(píng)論。將以下行添加到帖子控制器中的顯示視圖中。

'評(píng)論',:集合=>@發(fā)布%>

一個(gè)是完成,一個(gè)功能齊全的評(píng)論系統(tǒng)被實(shí)現(xiàn)。

07

257 of 07 258

261>Next迭代

在下一個(gè)教程迭代中,簡(jiǎn)單的U格式將被稱為紅布的更復(fù)雜的格式引擎取代。RedCloth允許用戶使用簡(jiǎn)單的標(biāo)記創(chuàng)建內(nèi)容,例如*粗體*,斜體為斜體。這將適用于博客海報(bào)和評(píng)論者。