2010-09-26 243 views
9

我很新的Rails3中,我基本上创造了一个subscribers脚手架,我只希望我的应用程序,以newcreate行动作出回应。在Rails3中覆盖到/(root)的资源路径:不更改路径助手?

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

 
resources :subscribers, :only => [:new, :create] 

哪那么在这里以这种方式工作

 
GET /subscribers => subscribers#new 
POST /subscribers => subscribers#create 

现在,我想我的应用程序在/(根)表现,而不是/subscribers的用户资源,是我做了什么:

 
match '/' => "subscribers#new" 
match '/' => "subscribers#create" 
match '/' => "subscribers#thankyou" 
resources :subscribers, :only => [:new, :create] 

这在某种程度上有效,但可能不是DRYest的事情:这里是我的问题:

  1. 当在创建浏览器有问题后要回窗体显示/subscribers网址,而不是仅仅/,形式使用form_for(@subscriber) helper方法,所以path助手必须由路线
  2. 莫名其妙不受影响理想我甚至不希望应用程序来响应请求的/subscribers
  3. 我注意到一个奇怪的错误,张贴在创建在断开连接的情况下(从/开始,然后在连接时进行刷新n回来了(浏览器要求重新提交=>确定),Rails应用程序崩溃了(我没有错误堆栈,虽然这是在生产中),为什么?

而且,我试图建立的路线是这样的:

 
resources :subscribers, :only => [:new, :create] do 
    collection do 
    post '/' => :create 
    get '/' => :new 
    end 
end 

这可能是干燥的,但它并没有解决所有这些问题。

我相信这是一件很简单,请大家帮忙!

+0

你战斗惯例,它总是会是一场艰苦的战斗。我会质疑不希望你的应用程序响应/订户和使用/为2或3个不同的行动的原因。你应该重新考虑你的架构。 – 2010-09-28 00:46:44

+0

嘿bjeanes,我不想与公约打交道,它是即将到来的网站的邮件列表,所以几乎是唯一的事情,我认为有一个简单的方法可以将资源放在/? – 2010-09-28 21:40:27

回答

19

谢谢你的答案,它帮我找到我的问题的精确解:

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

测试和on Rails的工作3 :)

0

对于您的列表编号2,删除这条线,并改写你的ERB任何_path或_url方法:

resources :subscribers, :only => [:new, :create] 
3

你可以做

resources :subscribers, :path => '' 

,并确保GET /是被由您的根模板服务,例如加入这SubscribersController:

def index 
    render 'welcome/index' 
    end 

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