0

我在测试应用程序中使用 Rails 4。我有一个不标准的任意 URL,如resources :foo类型 URL。理想情况下,我想要的最终结果是能够:

/contests/:id/enter

在视图中,如果我可以使用命名助手设置链接,那就太好了,例如:

edit_contests_enter(:id)?

定义上述路由的最佳方法是什么,以便我可以将辅助路径与上述任意 URL 一起使用?不一定非要如此,edit_contests_enter(:id)但只要帮助程序路径指向上面建议的 URL,那就太好了。

4

2 回答 2

3

我假设您的比赛是一种资源,当您的访问者去/contests/:id/enter您希望他们创建一个对象时user <=> contest。让我们称之为participation

Nowparticipation与 Rails 应用程序中的任何其他资源完全一样,因此您的routes.rb文件看起来像

resources :contests do 
  resources :participations
end

除了创建参与之外,您不希望人们做任何事情,例如编辑或销毁它们。也许您想要一个不错的 URI,例如/contests/:id/enter. 你所要做的就是

resources :contests do 
  resources :participations, :only => [:new, :create]
  get "enter" => "participations#new"
end

这样做会给你一个名为contest_enter. 在您的participations#new表格中,您将POST像往常一样将/contests/:id/participations.

于 2013-03-25T03:20:07.460 回答
2

如果你有一个resources:contests,你可以使用以下方法在 ContestsController 上定义一个新的“成员”路由:

resources :contests do
  member do
    get :enter
  end
end

这将自动为您生成一个命名的成员路由,您可以通过运行找到其名称rake routes

于 2013-03-25T02:49:14.120 回答