dav*_*tes 2 variables routing ruby-on-rails
我已经搜索并尝试了http://guides.rubyonrails.org/routing.html中提到的许多不同的东西,但没有接缝来做我想要的.
要点:我有一个控制器,可以设置不同手机类型的视图
class PhoneViewsController < ApplicationController
def android_automated
#Do Android Stuff
end
def android_interactive
#Do Android Stuff
end
def ios_automated
#Do Apple Stuff
end
def ios_interactive
#Do Apple Stuff
end
def blackberry_automated
#Do Blackberry Stuff
end
def blackberry_interactive
#Do Blackberry Stuff
end
end
Run Code Online (Sandbox Code Playgroud)
上面的每个方法在phone_views视图文件夹中都有一个相应的视图部分
我希望像/ android/interactive这样的网址被读为phone_views#android_interactive
Rails路由具有允许我使用诸如的参数重定向的语法
get 'android/:action', to: redirect('/phone_views/android_%{action}')
get 'phone_views/:action' , :controller => 'phone_views'
Run Code Online (Sandbox Code Playgroud)
这呈现正确的页面,但具有时髦网址的令人讨厌的副作用
我试过这个并将其用作:
get 'android/:mode', :to => 'phone_views#android_%{mode}'
Run Code Online (Sandbox Code Playgroud)
但我得到一个动作%{mode}未找到错误,好像它没有看到%{mode}作为变量
get 'android/:action', :controller => 'phone_views', :action => 'android_%{action}'
Run Code Online (Sandbox Code Playgroud)
导致错误操作"交互式"找不到,并且:
get 'android/:mode', :controller => 'phone_views', :action => 'android_%{mode}'
Run Code Online (Sandbox Code Playgroud)
获得与上面相同的操作%{mode} not found错误.
在get请求中获取命名变量(例如:mode)并在形成操作时使用它的语法是什么?
更新:我相信我几乎已经明白了这一点.这些变量似乎无法以我尝试使用它们的方式访问,但如果您将请求传递给proc {},则它们似乎是可访问的.
match 'android/:mode', to: proc{|params| action = params['action_dispatch.request.path_parameters'][:mode]; control = PhoneViewsController.new(); control.send('android_' + action)}, via: [:get]
Run Code Online (Sandbox Code Playgroud)
但这只会导致nil:NilClass的错误未定义方法`[]',但错误在适当的控制器中.希望这有助于解决这个问题
我不认为你想让一个随机的互联网用户能够选择他们想要访问的控制器方法,所以这就是你应该做的:
[:automated, :interactive].each do |mode|
[:android, :ios, :blackberry].each do |device|
get "#{ device }/#{ mode }", :to => "phone_views##{ device }_#{ mode }"
end
end
Run Code Online (Sandbox Code Playgroud)
如果需要添加其他设备或模式,只需在完成controller/views/etc中的方法后更新routes.rb文件.
如果你真的想要花哨,你可以将这些静态符号数组移动到他们自己的类中,以管理设备及其支持的模式.
此外,确保在处理路径中的冒号变量时对输入设置约束.
编辑:额外"在get
通话结束时被删除
归档时间: |
|
查看次数: |
779 次 |
最近记录: |