9

我对 Rails3 很陌生,我基本上创建了一个subscribers脚手架,我只希望我的应用程序响应newcreate操作。

所以在config/routes.rb我定义:

资源 :subscribers, :only => [:new, :create]

以这种方式工作

GET /订阅者 => 订阅者#new
发布 /订阅者 => 订阅者#创建

现在我希望我的应用程序在/(root) 而不是展示订阅者资源/subscribers,所以这就是我所做的:

匹配 '/' => "订阅者#new"
匹配'/' =>“订阅者#创建”
匹配 '/' => "订阅者#thankyou"
资源 :subscribers, :only => [:new, :create]

以某种方式起作用,但可能不是最干燥的事情:这是我遇到的问题:

  1. 在创建问题后返回表单时,浏览器会显示/subscribersURL 而不是/,表单是使用form_for(@subscriber)helper 方法创建的,因此pathhelper 必须不受路由的影响
  2. 理想情况下,我什至不希望应用程序响应请求/subscribers
  3. 我注意到一个奇怪的错误,在断开连接时发布表单(从/,然后在连接恢复时进行刷新(浏览器要求重新提交 => OK),Rails 应用程序崩溃(虽然我没有错误堆栈这是在生产中),这是为什么呢?

另外,我尝试以这种方式设置路线:

资源 :subscribers, :only => [:new, :create] 做
  收集做
    发布'/' =>:创建
    得到'/' =>:新
  结尾
结尾

这可能是 DRYer,但它不能解决任何这些问题。

我相信这很简单,请帮助!

4

3 回答 3

19

感谢您的回答,它帮助我找到了问题的确切解决方案:

资源 :subscribers, :only => [:new, :create], :path => '', :path_names => {:new => ''}

在 Rails 3 上测试和工作:)

于 2010-11-15T12:13:57.647 回答
3

你可以做

resources :subscribers, :path => ''

并确保GET /由您的根模板提供服务,例如通过将其添加到订阅者控制器:

  def index
    render 'welcome/index'
  end

我尝试使用match "/"声明来覆盖资源索引操作并将其映射到另一个控制器,但显然resources声明总是完全覆盖手动声明的路由。

于 2010-10-25T15:42:11.703 回答
0

对于列表中的第 2 行,删除此行,并重写 erb 中的任何 _path 或 _url 方法:

resources :subscribers, :only => [:new, :create]
于 2010-09-28T19:51:01.483 回答