2013-05-09 52 views
1

我現在有一些路線,看起來像下面這樣:Rails的路線,如何確定該成員適當

resources :contests do 
    member do 
     get :enter 
    end 
    end 

這讓我做一個HTTP GET上,看起來像一個URL /比賽/ 5 /進入。現在,用戶可以進入,填寫一些表格,並且能夠提交參賽作品。所以我也希望能夠發佈到這個URL。我試着做以下幾點:

resources :contests do 
     member do 
      get :enter 
      post :enter 
     end 
     end 
resources :contests do 
     member do 
      get :enter 
      post :enter 
     end 
     end 

這個貼子與我指定的GET成員相同,因此它不是很直觀。如果可能的話,我希望能夠將其引導至單獨的行動。這樣做的最好方法是什麼?目前我正在使用Ruby on Rails 4測試版。

**更新**

我嘗試以下,但我得到一個ArgumentError異常,當我啓動服務器:

resources :contests do 
    member do 
     get :enter 
     post :enter => "contests#create_entry" 
    end 
    end 

回答

1

你可以做這樣的事情:

resources :contests do 
    member do 
    get :enter 
    post '/enter', to: "contests#create_entry", as: "create_entry" 
    end 
end 

然而,我同意Ola Tuvesson的觀點,即使你沒有模型,你也應該創建一個新的控制器和路由條目,類似於你經常有一個會話控制器用於登錄和註銷。這樣的事情:

resources :contests do 
    resources :entries, only: [:new, :create] 
end 
1

您可以指定控制器/動作你要在指向一個路徑。

get :enter => "controller#get_enter" 
post :enter => "controller#post_enter" 
+0

試過,更新我的問題..拋出一個ArgumentError – randombits 2013-05-09 19:45:04

0

我會建議你讓比賽的小孩模型比賽的條目。這將使你在項目中的所有CRUD方法和你的路線,簡直是:

resources :contests do 
    resources :entries 
end 

/競賽/ 5 /條目的GET /新會給你的形式添加一個條目,並在此POST到/比賽/ 5 /條目將創建一個新條目。它也可以很容易地列出競爭等所有條目您可以輕鬆創建的控制器,模型和腳手架發電機的相關意見,例如:

rails g scaffold Entry contest:references name:string email:string 

references列類型告訴發電機鏈接以一對多的關係參賽的參賽作品。任務完成。

編輯:

如果你仍然想重命名你的路線,方法如下:

http://guides.rubyonrails.org/routing.html#overriding-the-named-helpers

HTH