проблема в этой строке
simple_form_for @city, :url => state_cities_path
вы не позволяете создателю формы создать правильный маршрут, по которому вы его вводите.
Построитель форм создает правильный маршрут для экземпляра, который вы передаете, обнаруживая, является ли новая запись, затем устанавливает правильный путь в атрибуте действия формы html и устанавливает правильный метод http.
Кажется, вас смутило то, что вы используете вложенные маршруты и пытаетесь передать путь / URL, поэтому построитель форм больше не обнаруживает ничего и позволяет вам устанавливать все, так как формы публикуются по умолчанию, и вы передача URL-адреса действию создания, которое никогда не соответствует действию обновления. Вы сопоставляете только действие create, потому что для действия обновления требуется такой идентификатор
PUT /states/:state_id/cities/:id
что есть то, что нужно для соответствия маршруту обновления, но вы не передаете ни идентификатор, ни метод http.
Решение
Позвольте построителю форм создать путь, это делается с помощью вложенных маршрутов, передавая массив с родительским экземпляром и дочерним экземпляром, который вы хотите использовать конструктору форм.
simple_form_for [@state,@city] do |f|
не забудьте поместить значение в @state, иначе это приведет к ошибке nil.
теперь построитель форм должен правильно построить правильный путь для действия создания и обновления.
кстати, вы также можете перенаправить в массив, подобный этому
redirect_to [@state,@city]
отправит пользователя на шоу-шоу города.