开发者

How can I call different controllers from routes.rb

I'm just struggling a few hours with a problem, that seems rather easy, but not for me and not for google :)

I put some routes via

scope :path开发者_开发百科 => '/:mandate_key', :controller => :tasks do
  get   '/'          =>  :index        #mandate_path
  match '/import'    => "import#index"
  match '/clearance' => "clearance#index"
end

So far, so ugly! I'm looking for a way to call different controllers (import and clearance) dependent on the second param. Something like this:

scope :path => '/:mandate_key', :controller => :tasks do
  get '/' =>  :index  
  scope :path => ':task_key', :controller => %{'task_key'}
    get '/' => :index
  end
end

where :task_key should be recognized as params[:task_key] and the called controller should be the value of params[:task_key]

So if a click a link like http://some.url/a_mandate_key/import it should call the ImportController.

I'm sure that the solution will be simple, but finding is hard!


Sometimes one is looking for a highly complicated solution, but it could be so much easier:

scope :path => '/:mandate_key' do
  get '/'           => "tasks#index"        #mandate_path
  get '/import'     => "import#index"
  get '/clearance'  => "clearance#index"
end

Calling http://localhost/mandate the controller 'mandate' is called an params[:mandate_key] provides 'mandate'

Calling http://localhost/mandate/import the controller 'import' is called an params[:controller] provides 'import'

Trying the easy way is often the best way :)

Thanks for your help, Bohdan!


you might add in the bottom of your routes match ':controller(/:action(/:id))' so any unknown url will be dispatched this way

How about

scope :path => '/:mandate_key', :controller => :tasks do
  get '/'            =>  :index        #mandate_path
end
....
match ':mandate_key/:controller(/:action)'

first scope will match routes /:mandate_key/tasks and the second one /:mandate_key/:controller or /:mandate_key/:controller/:action however second part should be defined in the bottom of your routes.rb file otherwise it'll match wrong routes

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜