我有这样的路线:
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'
我想得到的是,输入后: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'
编辑:我的rake路线看起来像这样:
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"}
编辑:
我试着按照加勒特提议的方式做,而且很有效。我改变了路线:
map.redirect '/', :controller => 'prepayments/login', :action => 'welcome'
并在控制器中增加了欢迎方法:
def welcome
redirect_to prepayments_root_path(:locale => 'en')
end
它可以按照我想要的方式工作(所以它在我的浏览器中更改了URL)。
另一种方法是像这样改变路线:
map.root :controller => 'prepayments/login', :locale => 'en'
它也可以工作,但它不重定向(它不改变浏览器中的URL)。我不确定是否有map.redirect
这样的选项。我在www上的例子中找到了它,但我也找到了添加这种功能的插件。
多谢帮忙!
4条答案
按热度按时间w46czmvw1#
在Rails 3中,你可以这样写:
下面的页面有一个很好的介绍在Rails 3中做这些重定向:http://www.railsdispatch.com/posts/rails-routing
nue99wik2#
root重定向选项似乎没有很好的文档化。
给你(@derek,见最后一个例子):
重定向到当前请求所在域名的子域名
从匹配的路由中替换参数重定向
重定向状态代码(例如。302而不是默认301)
使用条件块重定向
ercv8c1e3#
在Rails 4(我的例子是4.2.0)中,我添加了以下内容:
match "*path" => "main#index", :via => [:get, :post]
到app/config/routes.rb
。为了找出你应该把
main
的地方。看看这个文件:app/controllers/main_controller.rb
。同样,你的可能不叫main_controller.rb
,但它会是something_controller.rb
,可能不是application_controller.rb
或servers_controller.rb
。在这个文件中,你会看到一些代码,看起来像这样:在有MainController的地方,你应该能够通过Rails在浏览器中提供的错误消息来告诉你从这里应该做什么。只需将
match "*path" => "main#index", :via => [:get, :post]
中的 main 替换为控制器的前缀即可。希望这有意义。我也是一个Ruby初学者
hs1ihplo4#
您需要将控制器设置为
Welcome
或其他类型,然后当 that 控制器被命中时,它将重定向到您想要的路由。也许Rails3路由会更适合这样的东西,但现在,你需要有一个主根控制器。