2012-07-06 69 views

回答

14

實質上,路由資源是指資源爲控制器提供動作能力的時候。

http://guides.rubyonrails.org/routing.html#specifying-a-controller-to-use

如果是複數形式的資源作爲一種方法來處理上任何項目的通用要求,然後一個單一的資源在手在當前項目工作的方式。換句話說,如果我有蘋果的集合,爲了檢索特定的蘋果,我必須通過發送蘋果的ID來告訴路由器「蘋果」檢索哪個蘋果。如果我已經有一個Apple,那麼不需要ID。

通知通過看他們有什麼動作(或航線)兩者之間的區別:

  • 資源:指數,新,創建,顯示,編輯,更新,破壞
  • 資源:新,創建,顯示,編輯,更新,破壞

在您的例子:

  1. 控制器「geocoder」是一個單一的資源,您可以用來編輯,創建,更新等。
  2. 控制器「帖子」,是一個複合資源,將處理傳入的通用帖子,您可以索引,編輯,創建..等
+1

我的困惑:什麼是創造奇異的資源點;可以說我們已經定義了'resource:geocoder';這是否意味着我們將在一個名爲'geocoders'的整個'表格中有一個geocoder記錄? – illusionist 2015-10-21 10:07:47

+2

在文章的鏈接(自從發佈這篇文章以來已更新),他們實際上給了一個很好的例子。稱爲/ profile(而不是/ profile:id)的單一資源對於始終顯示當前登錄的用戶的配置文件將非常有用。因此,單個地理編碼器可以屬於當前用戶的位置,其中多個地理編碼器可以屬於附近地點的集合。如果您想將自己的地理編碼包含到該集合中,則取決於您。 – sksallaj 2015-10-21 17:09:55

8

http://guides.rubyonrails.org/routing.html#singular-resources

有時候,你有資源的客戶端總是仰望沒有 引用的ID。例如,您希望/ profile始終顯示當前登錄用戶的配置文件 。在這種情況下,您可以使用單個資源 來映射/配置文件(而不是/ profile /:id)到 顯示操作。

查看它的一個好方法是資源沒有索引操作,因爲它假設只是一個。

3

我認爲只是索引視圖。

也有報道與資源助手和形式助手的路由問題。我個人使用的語法如下:

resources :someresource, except: :index 

爲了避免reported bugs

4

奇異的資源:

有時候,你有資源的客戶端總是仰望沒有引用一個ID。例如,您希望/profile始終顯示當前登錄用戶的配置文件。

或者,通常你當前登錄的用戶屬於一個組織,所以要轉到他/她的組織檔案頁面可以有兩個途徑

#1 
/organizations/:id 

#2 
/organization #simply 

這裏,後來實現更有意義;是不是?你從協會組織對象

# in organizations#show 
@organization = current_user.organization 

定義這種奇異的資源使用resource方法:例

# in routes.rb 
resource :organization 

創建應用程序中的六個不同的路線,都映射到組織控制器:

enter image description here

然而,您使用定義了多個資源3210方法

resources :organizations 

enter image description here