kle*_*lew 31 redirect routes ruby-on-rails root
我有这样的路线:
map.namespace 'prepayments', :path_prefix => '/:locale/prepayments' do |prepayment|
prepayment.root :controller => 'login', :namespace => 'prepayments'
...
end
map.redirect '/', :controller => 'prepayments/login' # this is not working
# I tried also
map.root :controller => 'prepayments/login'
Run Code Online (Sandbox Code Playgroud)
我想要的是在输入后:www.example.com它会将我重定向到www.example.com/en/prepayments.
早些时候我map.root从上面的例子中使用它只是留在www.example.com并呈现正确的视图(但它没有:locale,它工作得很好),后来我添加:locale到我的路线,从这时我的视图(使用某种形式)不工作正常.我得到错误,它找不到相应的表格路线 - 这是对的,因为我没有通过任何:locale.
那么,如何将root重定向到另一个页面?它可能需要生成正确的路径并通过http 302传递它.或者/和如何制作类似的东西:
map.root :controller => 'prepayments/login', :my_locale => 'en'
Run Code Online (Sandbox Code Playgroud)
编辑:我的佣金路线看起来像这样:
prepayments_root /:locale/prepayments {:controller=>"prepayments/login", :action=>"index"}
prepayments_create /:locale/prepayments/send_email {:method=>:post, :controller=>"prepayments/login", :action=>"send_email"}
prepayments_home /:locale/prepayments/home {:controller=>"prepayments/prepayments", :action=>"home"}
prepayments_save /:locale/prepayments/save {:controller=>"prepayments/prepayments", :action=>"save"}
prepayments_agree /:locale/prepayments/agree {:controller=>"prepayments/prepayments", :action=>"agree"}
prepayments_disagree /:locale/prepayments/disagree {:controller=>"prepayments/login", :action=>"logout"}
prepayments_payment /:locale/prepayments/payment {:controller=>"prepayments/prepayments", :action=>"payment"}
prepayments_payment_email /:locale/prepayments/payment_email {:controller=>"prepayments/prepayments", :action=>"payment_email"}
/:locale/prepayments/:uid {:controller=>"prepayments/login", :action=>"verify"}
redirect / {:controller=>"prepayments/login", :action=>"index"}
Run Code Online (Sandbox Code Playgroud)
编辑:
我尝试按照加勒特提出的方式做到这一点并且有效.我换了路线:
map.redirect '/', :controller => 'prepayments/login', :action => 'welcome'
Run Code Online (Sandbox Code Playgroud)
并在控制器中添加了welcome方法:
def welcome
redirect_to prepayments_root_path(:locale => 'en')
end
Run Code Online (Sandbox Code Playgroud)
它按我的意愿工作(所以它在我的浏览器中更改URL).
另一种方法是改变这样的路线:
map.root :controller => 'prepayments/login', :locale => 'en'
Run Code Online (Sandbox Code Playgroud)
它也有效,但它没有重定向(它不会改变浏览器中的URL).我不确定是否有这样的选择map.redirect.我在www上的示例中找到了它,但我也找到了添加此类功能的插件.
感谢帮助!
Sha*_*ald 139
在Rails 3中,您可以编写:
root :to => redirect('/prepayments')
Run Code Online (Sandbox Code Playgroud)
以下页面介绍了如何在Rails 3中执行这些重定向:http://www.railsdispatch.com/posts/rails-routing
gla*_*asz 35
重定向选项似乎没有记录得太好.
你去吧(@derek,见最后一个例子):
重定向到当前请求的域上的子域
root to: redirect(subdomain: 'foo', path: '/bar') # => foo.example.com/bar
Run Code Online (Sandbox Code Playgroud)
从匹配的路线重定向替换参数
get 'stores/:name(*all)', to: redirect(subdomain: 'stores', path: '/%{name}%{all}')
Run Code Online (Sandbox Code Playgroud)
使用状态代码重定向(例如302而不是默认301)
redirect(path: '/foo', status: 302)
Run Code Online (Sandbox Code Playgroud)
使用条件块重定向
redirect(status: 302) { |params, request|
case request.host
when 'localhost'
'/foo'
when /example.com$/
'/bar'
else
'/baz'
end
}
Run Code Online (Sandbox Code Playgroud)
Gar*_*ett -8
您需要将控制器设置为 aWelcome或其他,然后当该控制器被击中时,它将重定向到您想要的路线。也许 Rails 3 路由对于这样的事情会更好,但现在,您需要有一个主根控制器。
| 归档时间: |
|
| 查看次数: |
37140 次 |
| 最近记录: |