2010-10-26 6 views
1

У меня вчера это работало, я не знаю, что я сделал, чтобы сломать его.Rails 3 Ошибка маршрутизации

Вот маршруты для RESTful контроллера:

brand_responsibilities GET /brands/:brand_id/responsibilities(.:format)   {:action=>"index", :controller=>"responsibilities"} 
brand_responsibilities POST /brands/:brand_id/responsibilities(.:format)   {:action=>"create", :controller=>"responsibilities"} 
new_brand_responsibility GET /brands/:brand_id/responsibilities/new(.:format)  {:action=>"new", :controller=>"responsibilities"} 
edit_brand_responsibility GET /brands/:brand_id/responsibilities/:id/edit(.:format) {:action=>"edit", :controller=>"responsibilities"} 
brand_responsibility  GET /brands/:brand_id/responsibilities/:id(.:format)  {:action=>"show", :controller=>"responsibilities"} 
brand_responsibility  PUT /brands/:brand_id/responsibilities/:id(.:format)  {:action=>"update", :controller=>"responsibilities"} 
brand_responsibility  DELETE /brands/:brand_id/responsibilities/:id(.:format)  {:action=>"destroy", :controller=>"responsibilities"} 

Моя форма выглядит следующим образом:

<%= form_for :responsibility, :remote => true do |f| %> 
    <%= f.hidden_field :access_request_id, :value => ar.id %> 
    <%= f.hidden_field :user_id, :value => user.id %> 
    <%= f.hidden_field :brand_id, :value => @brand.id %> 
    <%= f.submit %> 
<% end %> 

Но я получаю 404 теперь с этим журнального сообщения:

Started POST "/brands/30/responsibilities" for 127.0.0.1 at Tue Oct 26 10:47:17 -0400 2010 

ActionController::RoutingError (No route matches "/brands/30/responsibilities"): 

Наверное, похоже, что матчи соответствуют мне! Что мне не хватает?

Обновление: Я также попытался это в консоли:

rs.recognize_path '/brands/30/responsibilities', :method => :post 

и ответ:

=> {:controller=>"responsibilities", :brand_id=>"30", :action=>"create"} 

Что такое мое дело?

UPDATE # 2:

Я нашел причину, хотя я не знаю, почему это причина. У меня есть другое поле:

<%= button_to "Deny", brand_responsibilities_path(@brand, :ar => ar), :remote => true, :method => :delete %> 

Это я был включен в форму. Раньше я оставил это для краткости, потому что я не думал, что это важно. Я вижу, что это была плохая идея.

Кто-нибудь знает, почему наличие этой строки в форме вызывает странную ошибку маршрутизации?

+3

Странно! С информацией, которую вы предоставили, она должна работать. Перезапустили ли вы сервер после добавления маршрутов в 'config/routes.rb'? – Ariejan

+2

Это, вероятно, не поможет вашей проблеме, но это просто приятно узнать ... вы можете сделать <% form_for [@brand,: ответственность]%>, чтобы избежать скрытого поля, передающего идентификатор бренда. Это также будет генерировать действие/brands /: id/обязанностей в форме. Кроме того, единственным объяснением вашей проблемы является то, что в приоритете есть маршрут с более высоким приоритетом (ниже в списке маршрутов), переопределяющий те, которые вы вставили. – jenjenut233

+0

Да, я перезапустил и все. Я переконфигурировал форму на ваш пример Джен, и я тоже это увидел в Bates 'Controller в Rails 3 screencast. Еще одно и то же. Мой маршрут: ресурсы: бренды делают ресурсов: обязанности конца Там нет ничего общего над ним или под ним в routes.rb. – AKWF

ответ

1

Кажется, что я идиот.

Оставив эту важную информацию, это была плохая идея. Наличие кнопки в форме не-нет, она создает форму внутри формы.

Rookie ошибка. Жаль, что я делал это в течение долгого времени. Приоритеты комментаторам, жаль, что тратили свое драгоценное время.

Смежные вопросы