簡體   English   中英

通過Rails中的RESTful路由將變量傳遞給Controller

[英]Passing variables to Controller via RESTful routing in Rails

以下問題與將變量從路由傳遞到控制器有關。 我有一個帶有一個模型的Ruby on Rails(v 2.3.3)應用程序,該應用程序以多種視圖交付給用戶。 當前的解決方案涉及使用由多個路由觸發的多個控制器。 例如:

ActionController::Routing::Routes.draw do |map| # defines map

map.resource :simpsons, :only => [] do |b|
  b.resources :episodes, :controller => "SimpsonsEpisodes"
end
map.resource :flintstones, :only => [] do |b|
  b.resources :episodes, :controller => "FlintstonesEpisodes"
end

但是,出於干性考慮,我希望這些路由可以在同一控制器上運行。 為了使控制器能夠區分路線,我想通過路線傳遞變量。 例如:

map.resource :simpsons, :only => [] do |b|
  b.resources :episodes, :controller => "Episodes", :type => "simpsons"
end
map.resource :flintstones, :only => [] do |b|
  b.resources :episodes, :controller => "Episodes", :type => "flintstones"
end

因此,在控制器中,我可以這樣做:

case(type)
when "simpsons" then ... do something for the Simpsons ...
when "flintstones" then ... do something for the Simpsons ...
else      .... do something for all episodes ....
end

我找到了一種使用非RESTful路由(map.with_options等)的方法,但是我更喜歡將RESTful路由與map.resource一起使用。 一種丑陋的解決方案可能是在控制器中解析請求URI,我不希望這樣做。

由於沒有答復,我找到了解決方案,所以我將自己回答這個問題。 如果您也遇到這樣的情況,即您可能有一個具有多個條目的模型或表,但是對於其中某些條目,您可能需要單獨的視圖,這可能會給您帶來一些好處。

您很可能希望擁有不同的索引,為此只需使用collection get:

 map.resources :episodes, :collection => {:simpsons=> :get, :flintstones=> :get} do |episode|
 ....and so on

只需在控制器中添加名為“ simpsons”和“ flintstones”的方法即可。 並且,對於編輯,查看和刪除方法,如果需要,可以通過確定當前條目的ID來使用一些額外的邏輯。 類似於@episode = Episode.find(params [:id]),如果@ episode.criteria == ...某物...則呈現此視圖或另一個視圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM