ruby-on-rails-3 - anidados - formularios en ruby on rails
Actualizar formulario en rieles: ninguna ruta coincide con (3)
Si utilizó el enrutamiento RESTful, no necesita especificar una url
, solo necesita:
<%= form_for @car do |f| %>
El formulario puede saber que @car
es un nuevo registro, o un registro guardado, por lo que enviará el método http apropiado.
Y en su acción de actualización:
def update
@car = Car.find(params[:id])
if @car.update_attributes(params[:car])
redirect_to root_path
end
end
Tengo un formulario para crear anuncios.
Controladores:
def edit
@engines = Engine.all
@car = Car.find(params[:id])
end
def update
@car = Car.find(params[:id])
if @car.save
redirect_to root_path
end
end
Mis rutas:
resources :adverts
Create.html.erb
<%= form_for @car, :url => adverts_path do |f| %>
<div><%= f.label :name %><br />
<%= f.text_field :name %></div>
<%= hidden_field_tag :model_id, params[:model_id] %>
<%= select_tag :engine_id, options_from_collection_for_select(@engines, "id", "name",:selected=>@car.engine_id) %>
<div><%= f.submit "Create car!" %></div>
<% end %>
Puedo crear un anuncio, pero no puedo actualizarlo.
edit.html.erb
<%= form_for @car, :url => adverts_path do |f| %>
<div><%= f.label :name %><br />
<%= f.text_field :name %></div>
<%= hidden_field_tag :model_id, params[:model_id] %>
<%= select_tag :engine_id, options_from_collection_for_select(@engines, "id", "name",:selected=>@car.engine_id) %>
<div><%= f.submit "Update car!" %></div>
<% end %>
cuando envié mi formulario, tengo un error: ninguna ruta coincide con [PUT] "/ publics"
$ rutas de rake:
adverts GET /adverts(.:format) adverts#index
POST /adverts(.:format) adverts#create
new_advert GET /adverts/new(.:format) adverts#new
edit_advert GET /adverts/:id/edit(.:format) adverts#edit
advert GET /adverts/:id(.:format) adverts#show
PUT /adverts/:id(.:format) adverts#update
DELETE /adverts/:id(.:format) adverts#destroy
Necesito ayuda.
Hoy me encontré en una situación similar con un recurso y un nombre de modelo no coincidentes. Acepto que el modelo y los nombres de los controladores deben correlacionarse, pero puede anular el nombre de las rutas para que sea lo que usted desee.
resources :cars, path: "adverts"
Junto con el enrutamiento RESTful
<%= form_for @car do |f| %>
Cuando está actualizando, debe dejar que Rails sepa qué objeto desea actualizar al pasar una id
.
En edit.html.erb
cambio:
<%= form_for @car, :url => adverts_path do |f| %>
a:
<%= form_for @car, :url => advert_path(@car) do |f| %>
Por cierto, creo que tu código es muy extraño. ¿Por qué sus nombres de modelo no coinciden con sus controladores y rutas? Quiero decir que estás creando un anuncio, pero tu modelo se llama auto. Eso no tiene ningún sentido. O llámalo coche o anuncio, pero no los mezcles.