我目前有一些如下所示的路线:
resources :contests do
member do
get :enter
end
end
这允许我对看起来像/ contests / 5 / enter的URL进行HTTP GET。现在,用户可以进入,填写一些表格,并能够提交参赛作品。所以我也希望能够发布到这个URL。我尝试了以下操作:
resources :contests do
member do
get :enter
post :enter
end
end
这发布到与我指定的GET成员相同的控制器#action,因此它不是很直观。如果可能的话,我希望能够将其指向单独的行动。这样做的最佳方法是什么?我目前正在使用Ruby on Rails 4 beta。
**更新**
我尝试了以下操作,但在启动服务器时出现了ArgumentError异常:
resources :contests do
member do
get :enter
post :enter => "contests#create_entry"
end
end
答案 0 :(得分:1)
您可以指定要指定路线的控制器/操作。
get :enter => "controller#get_enter"
post :enter => "controller#post_enter"
答案 1 :(得分: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
答案 2 :(得分:0)
我建议你把比赛的参赛作品作为比赛的儿童模特。这将为您提供条目上的所有CRUD方法,您的路线将只是:
resources :contests do
resources :entries
end
/ contests / 5 / entries / new的GET将为您提供添加条目的表单,当此POST发送到/ contests / 5 /条目时,它将创建一个新条目。它还可以轻松列出竞赛等所有条目。您可以使用脚手架生成器轻松创建控制器,模型和相关视图,例如:
rails g scaffold Entry contest:references name:string email:string
references
列类型告诉生成器将竞赛与条目链接为一对多关系。任务完成。
修改:
如果您仍想重命名路线,请按以下方式进行操作:
http://guides.rubyonrails.org/routing.html#overriding-the-named-helpers
HTH