2015-04-07 3 views
0

У меня есть form_for, который генерирует мне этот HTML форму:Некорректное подходят для маршрута Rails

<form id="new_programm" action="/programms" accept-charset="UTF-8" method="post"> 
    .. some code etc. 
</form> 

Так, ясно, что эта форма была отправлена ​​через post и маршрут его совпавший

POST /programms(.:format) programms#create 

Но когда я отправлю форму, она ищет действие index. Таким образом, он соответствует запросу. Я определил маршруты, используя resources :programms. Как это могло случиться. Почему моя форма соответствует разному?

Мой form_for:

<%= form_for po do |f| %> 
<% end %> 

Где ро- локальная переменная передается, когда я вынести _form частично. Кстати, я визуализирую свою форму из клиентского/шоу-представления. Поэтому мой «po» varaible в созданном в # методе show # show.

def show 
    .. some code .. 
    @po = Programm.new 
end 

в клиентах/показать это визуализируется с использованием:

<%= render 'programms/form', po: @po %> 

Самое интересное в том, что если я инспектировать код в поджигатель, ясно, что эта форма должна быть представлена ​​по почте. Но он использует get.

+0

Вставить form_for code – RSB

+0

где вы определили 'po'? – RSB

+0

'@ po' вместо вида' po'? – bsvin33t

ответ

0

Я думаю, что вы передаете nil объект form_for вспомогательный метод, попробуйте вместо этого:

<%= render partial: 'programms/form', locals: {po: @po} %> 

Для отладки цели, вы можете попробовать это:

<%= form_for(programm.new) do |f| %> 
<% end %> 
+0

Нет, он все еще использует запрос на получение. – yerassyl

+0

Добавьте свой полный файл маршрута в свой пост, кстати, я обновил свой ответ. –

+0

@SharvyAhmed, как вы можете видеть, он не следует обычным конвенциям RESTful. Итак, «новое» действие не поможет – bsvin33t

0

Спасибо всем за помощь. Это была моя БОЛЬШАЯ ошибка. Когда я увидел ошибку, что мой маршрут не соответствует, я думал, что это не соответствует моей форме, потому что я видел/url программы. Но на самом деле я уже вызвал свой метод # create для программы и перешел к URL-адресу/programms, и после этого мой метод создания попытался перенаправить на другой URL-адрес, где он действительно не удалось. И так как я все еще видел старый URL-адрес в браузере, я думал, что он провалился, прежде чем вызывать программы # create.

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