为路由资源提供更多特异性

时间:2015-08-06 02:46:51

标签: ruby-on-rails forms routes custom-routes

我的routes.rb中有两行,如下所示:

  resources :locations
  get '/locations/:session_series_token/new', to: 'locations#new', as: "new_location"

我想在我的LocationsController中使用create方法,而且我还想要一个特定的locations#new路径。

删除resources :locations行会导致我的#new表单出错:

undefined method `locations_path' for #<<Class:0x007fa18caeb3b8>:0x007fa18caea8f0>
Extracted source (around line #1):

  <%= form_for [@location] do |form| %>
    <h2>Class Location</h2>

必须有办法正确地做到这一点!

2 个答案:

答案 0 :(得分:0)

我认为,由于您要移除resources: locations,因此不再有&#34;索引&#34;位置路线(称为locations_path)。运行命令rake routes,您将看到只剩下new_location_path。

尝试像这样指定路径:

<%= form_for @location, url: new_location_path do |form| %>

答案 1 :(得分:0)

试试这个:

resources :locations, except: [:new]
get '/locations/:session_series_token/new', to: 'locations#new', as: "new_location"

由于resources :locations为您定义了所有路由,因此您需要明确定义new路由,以便您可以像上面那样编写。如果您移除了resources :locations,那么您的create路由也会被移除,而<%= form_for [@location] do |form| %>行会搜索locations_path行为create

希望这有帮助。