2012-01-15 47 views
0

我很新的Web開發(我覺得我所有的帖子最近已就這樣開始了),併成爲,隨着時間的推移,較少新軌道。我正處於可以爲我的工作做大量事情的地步,但我仍然遇到一個嘮叨的問題:如何決定使用何種行動

我該如何決定是否應該爲給定任務使用哪種操作? index, show,new, edit,create,updatedestroy

破壞是很明顯的,我可以鬆散地劃分爲其餘兩個桶索引/顯示於一體,並新建/編輯/於其他創建。但是,我該如何決定使用哪一個或者我應該自己創建一個?

一些通用指南或進一步閱讀的鏈接對我來說是非常有益的。

回答

6

這裏是如何,我認爲這7個REST風格Controller行動。以個人資源爲例。相應的PeopleController將包含以下操作:

索引:列出一組人(可能有一些可選條件)。

顯示:加載一個以前創建的人員,目的是查看。相應的視圖通常是「只讀」的。

:設置或建立的人的新實例。它尚未保存,只是設置。相應的視圖通常是用戶可以輸入這個新人的屬性值的某種形式。當這個表單被提交時,Rails將它發送給「創建」操作。

創建:保存使用「新」操作設置的人員。

編輯:檢索以前創建的人,目的是更改其屬性。這些更改尚未完成或尚未提交。相應的View通常是Rails將提交給「更新」操作的表單。

更新:保存編輯先前建立的人的時候所做的更改。

destroy:好的,正如你猜測的那樣,銷燬或刪除一個以前創建的Person。

當然有一些爭論這些行動7是否足以爲所有控制器,但以我的經驗,他們往往有少數例外來完成這項工作。添加其他操作通常表示需要額外的資源類型。

例如,假設您的人力資源應用程序充滿了您剛要僱用的人員資源。爲了做到這一點,你可能會試圖創建一個「僱用」行爲(即/ people/456/hire)。但是,更多REST風格的方法會將此視爲就業資源的「創造」。類似以下內容:

class Person < ActiveRecord::Base 
    has_many :employments 
    has_many :employers, :class_name => 'Company', :through => :employments, :source => :company 
end 

class Employement < ActiveRecord::Base 
    belongs_to :person 
    belongs_to :company 
end 

class Company < ActiveRecord::Base 
    has_many :employments 
    has_many :employees, :class_name => 'Person', :through => :employments, :source => :person 
end 

然後將使用EmploymentsController的create動作。

好的,這是越來越長。不要害怕設置許多不同的資源(並且你可能不會使用所有這7個控制器動作)。它從長遠來看付出了代價,並幫助您堅持這7個基本的RESTful行動。

1

無論你想要什麼,你都可以爲你的動作命名。一般來說,按Rails慣例,index是默認值,show顯示一個項目,list顯示很多,newedit開始編輯一個新的或舊的項目,並且create和將分別保存它們。正如你猜測的那樣,destroy會殺死一件物品。但是,所有這些只是慣例:如果這就是你想要做的事,你可以將你的行動命名爲yellowtail

相關問題