在Rails 4中命名的路线

时间:2013-03-25 02:35:09

标签: ruby-on-rails ruby ruby-on-rails-4

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

/contests/:id/enter

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

,那就太棒了

edit_contests_enter(:id)

上面定义路由的最佳方法是什么,所以我可以使用带有任意URL的帮助路径,如上所示?它不一定必须是edit_contests_enter(:id),但只要辅助路径通过上面建议的URL,那就太棒了。

2 个答案:

答案 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找到该名称。