Проблемы с маршрутизацией в Rails form_for - PullRequest
1 голос
/ 06 мая 2009

У меня есть форма, которую я использую, чтобы попытаться обновить поле для «вещи», однако я получаю серьезные проблемы, которые, вероятно, сводятся к чему-то глупому.

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

<% form_for :thing, :url => { :action => "update" } do |f| %>
    <%= f.collection_select :status_id, Thing.statuses, :first, :last %>
    <%= f.submit 'Submit' %>
<% end %>

Мне кажется, это правильно (@ что-то существует, кстати), однако, когда я отправляю, я получаю

Unknown action
No action responded to 145

и т. Д. И т. Д. URL-адрес http://localhost:3000/things/145. Что я делаю не так?

Ответы [ 3 ]

4 голосов
/ 06 мая 2009

При использовании маршрутов RESTful действие update запускается при распознавании запроса put. Вероятно, вам просто нужно указать метод в качестве опции HTML:

form_for :thing, :url => { :action => "update" }, :html => { :method => 'put' } do |f|
4 голосов
/ 06 мая 2009

Если вы использовали RESTful маршрутизацию (и я предполагаю, что вы используете), вы можете просто сделать это:

<% form_for @thing do |f| %>
  <%= f.collection_select :status_id, Thing.statuses, :first, :last %>
  <%= f.submit 'Submit' %>
<% end %>

И это будет указывать на правильное действие в зависимости от того, @thing - new_record? или нет.

1 голос
/ 06 мая 2009

Я как бы презираю ActionView, поэтому я всегда ржавый, когда дело доходит до него, но попробуйте

<% form_for :thing, :url => 
     url_for(:action => "update", :id => @thing) do |f| %>

Я уверен, что кто-то еще может придумать что-нибудь более сухое и чистое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...