Foros del Web » Programando para Internet » Ruby »

[SOLUCIONADO] Problema para acceder a la vista new

Estas en el tema de Problema para acceder a la vista new en el foro de Ruby en Foros del Web. Hola que tal, bueno mi problema es el siguiente, cree un sistema en rails y hasta aqui todo normal. Configure mi routes.rb y lo deje ...
  #1 (permalink)  
Antiguo 04/04/2014, 14:09
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 16 años, 2 meses
Puntos: 58
Problema para acceder a la vista new

Hola que tal, bueno mi problema es el siguiente, cree un sistema en rails y hasta aqui todo normal.

Configure mi routes.rb y lo deje de la siguiente manera:

Código Ruby:
Ver original
  1. resources :cenproveedores
  2.  
  3. root :to => "cenproveedores#index"

En mi rake routes me da esto

Código Ruby:
Ver original
  1. cenproveedores GET    /cenproveedores(.:format)          cenproveedores#index
  2.                    POST   /cenproveedores(.:format)          cenproveedores#create
  3.  new_cenproveedore GET    /cenproveedores/new(.:format)      cenproveedores#new
  4. edit_cenproveedore GET    /cenproveedores/:id/edit(.:format) cenproveedores#edit
  5.  
  6.      cenproveedore GET    /cenproveedores/:id(.:format)      cenproveedores#show
  7.                    PATCH  /cenproveedores/:id(.:format)      cenproveedores#update
  8.                    PUT    /cenproveedores/:id(.:format)      cenproveedores#update
  9.                    DELETE /cenproveedores/:id(.:format)      cenproveedores#destroy
  10.               root GET    /                                  cenproveedores#index

Cuando entro al index cargo un grid, el cual se muestra correctamente, el problema se me presenta que al seleccionar el link para un nuevo usuario no me deja.

Mi controller lo tengo asi:

Código Ruby:
Ver original
  1. def new
  2.     @cenproveedores = CenProveedores.new
  3.   end

Siendo CenProveedores el que corresponde a mi ActiveRecord.

En mi new.html.erb lo tengo asi:

Código Ruby:
Ver original
  1. <%= render 'form_cenproveedores' %>

En el form_cenproveedores lo tengo asi:

Código Ruby:
Ver original
  1. <%= form_tag(@cenproveedores) do |f| %>
  2.   <div class="field">
  3.     <%= f.label :numproveedor %><%= f.number_field :numproveedor %>
  4.   </div>
  5. <% end %>

Pero al momento de llegar al <%= form_tag(@cenproveedores) do |f| %> me marca el siguiente error:

Showing C:/cenproveedores/app/views/cenproveedores/_form_cenproveedores.html.erb where line #1 raised:

undefined method `cen_proveedores_index_path' for #<#<Class:0x38bb150>:0x378fca8>


Si en el form_cenproveedores, le pongo solamente <h1>Hola</h1>, funciona sin problemas.

Se me hace raro, porque si lo genero por scaffold se genera bien y sin problemas y lo reviso y son iguales, no se que pasa
__________________
Your Code as a Crime Scene...
  #2 (permalink)  
Antiguo 04/04/2014, 17:09
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 9 meses
Puntos: 137
Respuesta: Problema para acceder a la vista new

Cambia form_tag por form_for.

:P
__________________
>> abimaelmartell.com
  #3 (permalink)  
Antiguo 04/04/2014, 18:00
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 16 años, 2 meses
Puntos: 58
Respuesta: Problema para acceder a la vista new

Ya lo cambie por form_for y sigue igual, jejeje

Navegando encontre que es problema en como cree el proyecto, yo le puse CenProveedores, la ' s ' del ultimo la anexa solo rails.

Voy a hacer otro ejemplo utilizando en singular el modelo para ver si eso es, hago la prueba y aviso.

P.D. Gracias por responder abimex
__________________
Your Code as a Crime Scene...
  #4 (permalink)  
Antiguo 04/04/2014, 19:05
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 9 meses
Puntos: 137
Respuesta: Problema para acceder a la vista new

Si, los modelos deben ser en singular siempre :P

Saludos!
__________________
>> abimaelmartell.com
  #5 (permalink)  
Antiguo 04/04/2014, 19:13
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 16 años, 2 meses
Puntos: 58
Respuesta: Problema para acceder a la vista new

Pues cree el nuevo sistema e hice el cambio y nada, el error ahora es:

undefined method `catproveedores_path' for #<#<Class:0x391cd10>:0x3973398>

Tendre que seguir buscando, para ver que puede ser, no quiero usar el scaffold , pero si no le encuentreo creo que sera necesario
__________________
Your Code as a Crime Scene...
  #6 (permalink)  
Antiguo 04/04/2014, 20:58
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 9 meses
Puntos: 137
Respuesta: Problema para acceder a la vista new

rake routes que te dice
__________________
>> abimaelmartell.com
  #7 (permalink)  
Antiguo 07/04/2014, 08:53
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 16 años, 2 meses
Puntos: 58
Respuesta: Problema para acceder a la vista new

Hola abimex, mi rake routes dice asi:

Código Ruby:
Ver original
  1. catproveedor_index GET    /catproveedor(.:format)          catproveedor#index
  2.                    POST   /catproveedor(.:format)          catproveedor#create
  3.   new_catproveedor GET    /catproveedor/new(.:format)      catproveedor#new
  4.  edit_catproveedor GET    /catproveedor/:id/edit(.:format) catproveedor#edit
  5.       catproveedor GET    /catproveedor/:id(.:format)      catproveedor#show
  6.                    PATCH  /catproveedor/:id(.:format)      catproveedor#update
  7.                    PUT    /catproveedor/:id(.:format)      catproveedor#update
  8.                    DELETE /catproveedor/:id(.:format)      catproveedor#destroy
  9.               root GET    /                                catproveedor#index

El enlace a nuevo proveedor lo hago asi:

Cita:
Modelo:

class Catproveedore < ActiveRecord::Base
end
Cita:
Controller:

@catproveedor = Catproveedore.new
Cita:
Routes:

resources :catproveedor

root :to => 'catproveedor#index'
Cita:
Index.html.erb

<%= link_to "Alta de proveedores", new_catproveedor_path %>
__________________
Your Code as a Crime Scene...
  #8 (permalink)  
Antiguo 07/04/2014, 09:38
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 9 meses
Puntos: 137
Respuesta: Problema para acceder a la vista new

catproveedor_path(@model)

Aunque en teoria con

= link_to "", @model

, deberia funcionar.
__________________
>> abimaelmartell.com
  #9 (permalink)  
Antiguo 07/04/2014, 10:42
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 16 años, 2 meses
Puntos: 58
Respuesta: Problema para acceder a la vista new

Pues si, en teoria se tendria que mandar llamar al formulario de New, pero no lo hace

Si lo genero con Scaffold, se hace todo bien y si comparo la verdad, que no le veo nada diferente, son identicos, por eso es que se me hace raro

Seguire investigando
__________________
Your Code as a Crime Scene...
  #10 (permalink)  
Antiguo 07/04/2014, 12:09
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 9 meses
Puntos: 137
Respuesta: Problema para acceder a la vista new

en el metodo resources (en el router) el nombre del modelo es en plural

Te dejo los guides de como deben ser los nombres

- modelo -> singlular. ejemplo Usuario
- controlador -> plural. ejemplo UsuariosController
- routes.rb -> resources :modelo_en_singular. ejemplo resources :usuarios

Saludos!
__________________
>> abimaelmartell.com

Última edición por abimex; 07/04/2014 a las 12:16 Razón: agregé los ejemplos
  #11 (permalink)  
Antiguo 08/04/2014, 18:20
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 16 años, 2 meses
Puntos: 58
Respuesta: Problema para acceder a la vista new

Ahora si que estoy mas confundido

Hago lo siguiente:

Código Ruby:
Ver original
  1. En los controladores:
  2.  
  3.   def index
  4.     @prov = Catproveedor.find(id = 1)
  5.   end

Con esto, tiro una consulta a la BD y todo bien.

Si en la vista ( index.html.erb ), hago esta consulta:

Código Ruby:
Ver original
  1. <% @prov.each do |p| %>
  2.     <p>
  3.         <%= p.proveedor %>
  4.     </p>
  5. <% end %>

Al hacer eso me marca erro en el each:

Cita:
undefined method `each' for #<Catproveedor:0x3725b20>
Pero si lo pongo directo:

Código Ruby:
Ver original
  1. <p>
  2.     <%= @prov.proveedor %>
  3. </p>

Si me muestra el valor correctamente. No entiendo que pasa .

Version de Ruby:
Cita:
ruby 1.9.3p484
Version de Rails:
Cita:
Rails 4.0.4
__________________
Your Code as a Crime Scene...

Última edición por drako_darpan; 09/04/2014 a las 02:25
  #12 (permalink)  
Antiguo 09/04/2014, 04:32
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.489
Antigüedad: 22 años, 4 meses
Puntos: 2114
Respuesta: Problema para acceder a la vista new

Estás intentando usar .each en un registro y no en un array de registros, porque .find(1) siempre devolverá solamente un objeto, nunca varios.

http://guides.rubyonrails.org/active...-single-object
  #13 (permalink)  
Antiguo 09/04/2014, 09:17
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 16 años, 2 meses
Puntos: 58
Respuesta: Problema para acceder a la vista new

Hola que tal, gracias por responder pzin.

Como comentas, el error era mio al momento de usar el each

Y abusando un poco de tu ayuda, sigo con el problema del llamado de la vista new.

Código Ruby:
Ver original
  1. def new
  2.     @catproveedor = Catproveedor.new
  3.   end

En la vista tengo esto:

Código Ruby:
Ver original
  1. <%= render :partial => 'form_catproveedores.html' %>

El form lo tengo asi:

Código Ruby:
Ver original
  1. <%= form_for @catproveedor, :url => {:action => :crear } do |form| %>
  2.     <p>
  3.         <%= form.label :numproveedor %>
  4.         <%= form.number_fiel :numproveedor%>
  5.     </p>
  6.     <p>
  7.         <%= form.submit "Crear" %>
  8.     </p>
  9. <% end %>

Con esto me marca este error:

Código Ruby:
Ver original
  1. I18n::InvalidLocale in Catproveedores#new
  2. :es is not a valid locale
  3.  
  4. <%= form.label :numproveedor %>

Pero si le quito el :url => {:action => :crear }, me da este error:

Código Ruby:
Ver original
  1. NoMethodError in Catproveedores#new
  2. undefined method `catproveedors_path' for #<#<Class:0x392f970>:0x3b6cb98>
  3.  
  4. <%= form_for @catproveedor do |form| %>

Si me pudieras aclarar el porque, te lo agradeceria mucho
__________________
Your Code as a Crime Scene...
  #14 (permalink)  
Antiguo 09/04/2014, 16:57
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 16 años, 2 meses
Puntos: 58
Respuesta: Problema para acceder a la vista new

Hola que tal, pues bueno despues de mucho pelear con el código y pensar con calma, por fin pude hacer la inserción de la información.

Voy a tratar de explicar en unos pasos, como lo pude hacer funcionar.

Primero: El route.rb tienen que tener en cuenta que se pone donde se encuentran las vistas. En mi caso quedaria asi:

Código Ruby:
Ver original
  1. resources :catproveedores

Segundo: En los controladores, se pone la pagina a la que se mandara llamar. En mi caso quedaria asi:

Código Ruby:
Ver original
  1. def new
  2.   @catproveedor = Catproveedor.new
  3. end

Tercero ( Critico para mi punto de vista ): En la vista que tendra los controles, se tiene que poner la accion que se ejecutara, cuando se haga el submit. En mi caso:

Código Ruby:
Ver original
  1. <%= form_for @catproveedor, :url => { :action => :create } do |f| %>

Ya con esto, se solo falta en el controlador realizar la creación del registro en su BD.

Se agradece los comentarios " abimex" y " pzin ". Ahora si a desarrollar como DIOS manda
__________________
Your Code as a Crime Scene...

Etiquetas: rails, ror, vista
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:59.