我只是在几个小时内遇到问题,这似乎相当容易,但对我而言并不适合谷歌:)
我通过
放了一些路线scope :path => '/:mandate_key', :controller => :tasks do
get '/' => :index #mandate_path
match '/import' => "import#index"
match '/clearance' => "clearance#index"
end
到目前为止,太丑了!我正在寻找一种方法来调用不同的控制器(导入和清除)依赖于第二个参数。像这样:
scope :path => '/:mandate_key', :controller => :tasks do
get '/' => :index
scope :path => ':task_key', :controller => %{'task_key'}
get '/' => :index
end
end
其中:task_key
应被识别为params[:task_key]
,被叫控制器应为params[:task_key]
的值
因此,如果点击http://some.url/a_mandate_key/import
之类的链接,则应调用ImportController
。
我确信解决方案很简单,但发现很难!
答案 0 :(得分:2)
有时人们正在寻找一个非常复杂的解决方案,但它可能会更容易:
scope :path => '/:mandate_key' do
get '/' => "tasks#index" #mandate_path
get '/import' => "import#index"
get '/clearance' => "clearance#index"
end
调用http://localhost/mandate控制器'授权'被称为params [:mand_key]提供'授权'
调用http://localhost/mandate/import控制器'import'被称为params [:controller]提供'import'
尝试简单的方法通常是最好的方法:)
感谢您的帮助,Bohdan!
答案 1 :(得分:1)
您可以在路线match ':controller(/:action(/:id))'
的底部添加,以便以这种方式调度任何未知的网址
怎么样
scope :path => '/:mandate_key', :controller => :tasks do
get '/' => :index #mandate_path
end
....
match ':mandate_key/:controller(/:action)'
第一个范围将匹配路由/:mandate_key/tasks
,第二个范围匹配/:mandate_key/:controller
或/:mandate_key/:controller/:action
但是第二部分应该在routes.rb
文件的底部定义,否则它将匹配错误的路线