簡體   English   中英

在Rails3中覆蓋到/(root)的資源路由:不更改路徑幫助器?

[英]Overriding a resource route to / (root) in Rails3: not changing the path helper?

我是Rails3的新手,我基本上創建了一個subscribers腳手架,我只希望我的應用程序響應newcreate操作。

所以在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]

哪種方式有效,但可能不是最糟糕的事情:這里有我遇到的問題:

  1. 在創建問題后返回到表單時,瀏覽器顯示/subscribers URL而不是/ ,表單是使用form_for(@subscriber)幫助程序方法創建的,因此path幫助程序必須以某種方式不受path影響
  2. 理想情況下,我甚至不希望應用程序響應/subscribers的請求
  3. 我注意到一個奇怪的錯誤,當在斷開連接時發布表單(從/ ,然后在連接回來時刷新(瀏覽器要求重新提交=> OK),Rails應用程序崩潰(我沒有錯誤堆棧)因為這是生產),為什么呢?

此外,我嘗試以這種方式設置路線:

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

哪個可能是DRYer,但它不能解決任何這些問題。

我相信這很簡單,請幫忙!

感謝您的回答,它幫助我找到了我的問題的確切解決方案:

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

測試並使用Rails 3 :)

你可以做到

resources :subscribers, :path => ''

並確保您的根模板提供GET / ,例如將其添加到SubscribersController:

  def index
    render 'welcome/index'
  end

我嘗試使用match "/"聲明來覆蓋資源索引操作並將其映射到另一個控制器,但顯然resources聲明總是完全覆蓋手動聲明的路由。

對於列表中的數字2,刪除此行,並在erb中重寫任何_path或_url方法:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM