【问题标题】:Named route in Rails 4Rails 4 中的命名路线
【发布时间】:2013-03-25 02:35:09
【问题描述】:
我正在测试应用程序中使用 Rails 4。我有一个不标准的任意 URL,例如 resources :foo 类型的 URL。理想情况下,我想要的最终结果是能够:
/contests/:id/enter
在视图中,如果我可以使用命名帮助器设置链接,那就太好了,例如:
edit_contests_enter(:id)?
定义上述路由的最佳方法是什么,以便我可以将辅助路径与上述任意 URL 一起使用?它不一定必须是 edit_contests_enter(:id),但只要帮助程序路径指向上面建议的 URL,那就太好了。
【问题讨论】:
标签:
ruby-on-rails
ruby
ruby-on-rails-4
【解决方案1】:
我假设您的比赛是一种资源,当您的访问者访问/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。
【解决方案2】:
如果你有一个resources 块用于:contests,你可以使用以下命令在 ContestsController 上定义一个新的“成员”路由:
resources :contests do
member do
get :enter
end
end
这会自动为您生成一个名为 member route 的名称,您可以通过运行 rake routes 找到它的名称。