我是Rails3的新手,我基本上创建了一个subscribers
脚手架,我只希望我的应用响应new
和create
行为。
所以config/routes.rb
我定义了:
resources :subscribers, :only => [:new, :create]
哪种方式有效
GET /subscribers => subscribers#new POST /subscribers => subscribers#create
现在我希望我的应用在/
(root)而不是/subscribers
展示订阅者资源,所以这就是我所做的:
match '/' => "subscribers#new" match '/' => "subscribers#create" match '/' => "subscribers#thankyou" resources :subscribers, :only => [:new, :create]
哪种方式有效,但可能不是最糟糕的事情:以下是我遇到的问题:
/subscribers
网址而不只是/
,表单是使用form_for(@subscriber)
辅助方法创建的,因此path
帮助程序必须以某种方式不受路由影响/subscribers
/
,然后在连接回来时进行刷新(浏览器要求重新提交=> OK),Rails应用程序崩溃(I没有错误堆栈,虽然这是生产),为什么会这样?此外,我尝试以这种方式设置路线:
resources :subscribers, :only => [:new, :create] do collection do post '/' => :create get '/' => :new end end
哪个可能是DRYer,但它不能解决任何这些问题。
我相信这很简单,请帮助!
答案 0 :(得分:19)
感谢您的回答,它帮助我找到了问题的确切解决方案:
resources :subscribers, :only => [:new, :create], :path => '', :path_names => {:new => ''}
测试并使用Rails 3:)
答案 1 :(得分:3)
你可以做到
resources :subscribers, :path => ''
并确保您的根模板提供GET /
,例如将其添加到SubscribersController:
def index
render 'welcome/index'
end
我尝试使用match "/"
声明覆盖资源索引操作并将其映射到另一个控制器,但显然resources
声明始终完全覆盖手动声明的路由。
答案 2 :(得分:0)
对于列表中的数字2,删除此行,并在erb中重写任何_path或_url方法:
resources :subscribers, :only => [:new, :create]