2010-05-26 67 views
0

不知道如何設置這個問題(我仍然圍繞着Rails)。Rails路由:如何混合「GET」和「PUT」

讓我們試試這個:

說我想要實現Ryan Bates的優秀railscast的用戶側nested models。 (他展示瞭如何實施一項調查,您可以動態地添加和刪除問題和答案)。我想讓用戶知道這一點:能夠回答問題,而不是在教程中能夠添加評論。

在我看來,你必須實現一個顯示問題和答案的視圖,允許選擇答案和輸入評論。因此,需要有一種方法來顯示信息,但也需要更新輸入模型,對嗎?

我知道我沒有解釋得很好。我希望你能明白我的所作所爲。

這僅僅是一個設置正確路線的問題嗎?還是有一些控制器魔咒需要發生?

回答

1

的狀態,要做到這一點的典型方法Rails使用「資源豐富」的路由,它或多或少自然地將標準CRUD操作映射到您的方法r控制器,使用適當的HTTP動詞。

在路由文件(config/routes.rb)中,設置了所需的資源和操作。例如:

map.resources:疑問:的has_many =>:答案

將設立一個路由方案用於具有多個答案的問題,映射到根據Rails的約定以下動作:

index: GET /questions/1/answers # list of answers for question id=1 
show: GET /questions/1/answers/2 # display answer 2 
new: GET /questions/1/answers/new # render form for new answer for question id=1 
create: POST /questions/1/answers # create a new answer for question id=1 
edit: GET /questions/1/answers/2/edit # render form for answer for question id=1 
update: PUT /questions/1/answers/2 # update answer 2 
destroy: DELETE /questions/1/answers/2 # delete answer 2 

在控制器中,您可以創建映射到這些標準操作的方法。您也可以爲不屬於CRUD範例的事物創建您自己的方法和操作(例如,搜索AJAXified自動填充字段,例如)

希望能夠回答您的一些問題。

+0

我想我對此感到困惑(這也適用於Zepplock的答案),是我爲用戶端設置了一系列並行控制器和視圖瑞恩的調查範例,如果是這樣,是不是打敗了DRY模式?我基本上想要一個只讀的應用程序版本,我可以在其中查看和與調查進行交互,但只能回答問題並添加評論。我無法理解這一點。 – thermans 2010-06-01 20:22:46

+1

如果視圖是相同的,唯一的區別是根據查看者的角色顯示某些元素,您可能最好使用單個控制器和視圖,並將「private」部分用「if '聲明。 – zetetic 2010-06-01 23:23:09

-6

在ASP.NET MVC中有兩種控制器方法,同名但有不同的參數簽名。一種方法用一個屬性來裝飾,告訴它爲GET服務,另一種方法用一個屬性來裝飾,告訴它爲POST服務。 GET方法顯示視圖,POST方法更新模型。

我假設它在Rails中以類似的方式工作。

1

您需要一個「問題」資源,「答案」資源和「評論」資源。您還需要實現:

  • POST的「答案(這是‘創建’,在控制器的方法)來回答這個問題
  • POST的‘評論’(這是‘創造’的控制器方法)來創建評論
  • PUT的「問題」(這是在控制器的「更新」),「挑」的答案,這是有效地改變了「問題」資源
+0

好的,明白了。謝謝。現在我如何在視圖中訪問它們? – thermans 2010-05-26 18:12:55

+0

我只是好奇:是否只有在控制器中使用內置的CRUD方法才能獲得POST/PUT/GET/DELETE路由? – Robbie 2010-05-26 18:21:44

+0

@thermans:意見將具有相應的名稱:如「create.html.erb」。您可以在「視圖」文件夾中找到這些文件。我建議看看「腳手架」一代,它將爲您生成所有CRUD操作(包括路由)的模型/視圖/控制器 @Robbie:您可以自定義路由以啓用/禁用每個資源的POST/PUT/GET/DELETE ,併爲現有路線添加新路徑(方法) – Zepplock 2010-05-26 20:08:08

相關問題