我正在测试应用程序中使用Rails 4。我有一个不像resources :foo
类型网址那样标准的任意网址。理想情况下,我想要的最终结果是能够:
/contests/:id/enter
在视图中,如果我可以使用命名助手设置链接,例如:
,那就太棒了 edit_contests_enter(:id)
?
上面定义路由的最佳方法是什么,所以我可以使用带有任意URL的帮助路径,如上所示?它不一定必须是edit_contests_enter(:id)
,但只要辅助路径通过上面建议的URL,那就太棒了。
答案 0 :(得分:3)
我认为您的竞赛是一种资源,当您的访问者转到/contests/:id/enter
时,您希望他们创建一个对象user <=> contest
。我们称之为participation
。
现在participation
与您的Rails应用中的任何其他资源完全一样,因此您的routes.rb
文件看起来像
resources :contests do
resources :participations
end
除了创建参与之外,您不希望别人做任何事情,例如编辑或销毁它们。也许你想要一个像/contests/:id/enter
这样的优秀URI。你所要做的就是
resources :contests do
resources :participations, :only => [:new, :create]
get "enter" => "participations#new"
end
这样做会给你一个名为contest_enter
的路由助手。在participations#new
表单中,POST
照常/contests/:id/participations
。
答案 1 :(得分:2)
如果resources
有:contests
块,您可以使用以下方法在ContestsController上定义新的“成员”路线:
resources :contests do
member do
get :enter
end
end
这会自动为您生成一个名为member route的名称,您可以通过运行rake routes
找到该名称。