2010-09-26 66 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聲明總是完全覆蓋手動聲明路線。