我有这样的路由:

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之后.它会将我重定向到www.example.com/en/预付款.

早些时候,当我使用上面例子中的map.root时,它只是停留在www.example上.com并呈现了正确的视图(但没有:locale,效果很好),后来我在路由中添加了:locale,从那时起,我的视图(使用某种形式)无法正常工作.我得到一个错误,它找不到表单对应的路径——这是正确的,因为我没有通过任何:locale.

那么,如何将root重定向到另一个页面?它可能需要生成正确的路径并通过http 302进行传递.

map.root :controller => 'prepayments/login', :my_locale => 'en'

编辑:

         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"}

编辑:

我试着按照加勒特提议的方式go 做,结果成功了.我改变了路由:

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上的示例中找到了它,但我也找到了添加此类功能的插件.

谢谢你的帮助!

推荐答案

您需要将控制器设置为Welcome或更高,然后当点击that控制器时,它将重定向到您想要的路由.也许Rails 3路由对于这样的东西会更好,但是现在,你需要一个主根控制器.

Ruby-on-rails相关问答推荐

如何在_serialize之前执行代码?""或者如何在序列化属性之前对属性进行清理?

关于关联 has_many 的多级/三重嵌套形式

Rails ActiveRecord::LogSubscriber 不输出详细查询日志(log)

如何通过graphqlMutations 从rails销毁当前用户会话

多行与内联块之间的不同行为

ArgumentError 用于 Ruby on Rails 中非常简单的初始化方法,没有参数

rails s和bundle exec rails s有什么区别?

Ruby/Rails 中的类方法与常量

Rails 中页面视图的简单计数器

jQuery ajax 请求不会触发 Rails 控制器的 JS 响应?

水豚 click_link 与 :href 匹配

Rails(或 Ruby):Yes/No 而不是 True/False

如何在 Rails 应用程序中使用长 id?

如何按值按降序对哈希进行排序并在 ruby​​ 中输出哈希?

如何找出现有 Rails 应用程序基于哪个 Rails 版本?

在 where 查询中查找 nil has_one 关联

获取磁盘上 ActiveStorage 文件的路径

过滤器在渲染之前但在控制器之后执行?

如果多态关联的类型列不指向 STI 的基本模型,为什么多态关联对 STI 不起作用?

长期运行项目中的 Rebase Rails 迁移