validar rails formularios formulario anidados ruby-on-rails-3 forms routes insert-update

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.