繁体   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