Foros del Web » Programando para Internet » Ruby »

[SOLUCIONADO] Problema con Rails y mongoDB: mongoid y un query que no retorna nada

Estas en el tema de Problema con Rails y mongoDB: mongoid y un query que no retorna nada en el foro de Ruby en Foros del Web. Hola a todos, agradezco su ayuda, He hecho de todo para solucionar el siguiente problema: Estoy intentando mostrar un listado de documentos (0.0.0.0:3000/tipocontenidos/index) que esta ...
  #1 (permalink)  
Antiguo 24/07/2013, 14:13
Avatar de calichecal  
Fecha de Ingreso: junio-2009
Ubicación: Colombia
Mensajes: 288
Antigüedad: 15 años, 5 meses
Puntos: 12
Busqueda Problema con Rails y mongoDB: mongoid y un query que no retorna nada

Hola a todos, agradezco su ayuda, He hecho de todo para solucionar el siguiente problema:

Estoy intentando mostrar un listado de documentos (0.0.0.0:3000/tipocontenidos/index) que esta en una colección en una base de datos mongoDB, pero la salida me arroja:

Código:
    Started GET "/tipocontenidos/index" for 127.0.0.1 at 2013-07-23 17:22:36 -0500
    Processing by TipocontenidosController#index as HTML
      MOPED: 127.0.0.1:27017 COMMAND      database=admin command={:ismaster=>1} (30.4270ms)
      MOPED: 127.0.0.1:27017 QUERY        database=cms_monrails_development_crud_bd collection=ctipocontenido selector={} flags=[:slave_ok] limit=0 skip=0 batch_size=nil fields=nil (82.3016ms)
      Rendered tipocontenidos/index.html.haml within layouts/application (126.7ms)
    Completed 500 Internal Server Error in 187ms
    
    ActionView::Template::Error (undefined method `tipocontenido_path' for #<#<Class:0x000000026ee6f8>:0x000000027c4528>):
        8: 
        9:   - @tipocontenidos.each do |tipocontenido|
        10:     %tr
        11:       %td= link_to 'Show', tipocontenido
        12:       %td= link_to 'Edit', edit_tipocontenido_path(tipocontenido)
        13:       %td= link_to 'Destroy', tipocontenido, :method => :delete, :data => { :confirm => 'Are you sure?' }
        14: 
      app/views/tipocontenidos/index.html.haml:11:in `block in _app_views_tipocontenidos_index_html_haml__2795259947167794129_19628380'
      app/views/tipocontenidos/index.html.haml:9:in `_app_views_tipocontenidos_index_html_haml__2795259947167794129_19628380'
      app/controllers/tipocontenidos_controller.rb:7:in `index'
    
    
      Rendered /home/stivenson/.gem/ruby/1.9.1/gems/actionpack-3.2.13/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.1ms)
      Rendered /home/stivenson/.gem/ruby/1.9.1/gems/actionpack-3.2.13/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (0.9ms)
      Rendered /home/stivenson/.gem/ruby/1.9.1/gems/actionpack-3.2.13/lib/action_dispatch/middleware/templates/rescues/template_error.erb within rescues/layout (7.1ms)

Este es mi controlador, el cual genere con scaffold_controller

Código:
  class TipocontenidosController < ApplicationController
      # GET /tipocontenidos
      # GET /tipocontenidos.json
      def index
        @tipocontenidos = Tipocontenido.all
        
        respond_to do |format|
          format.html # index.html.erb
          format.json { render json: @tipocontenidos }
        end
      end
    
      # GET /tipocontenidos/1
      # GET /tipocontenidos/1.json
      def show
        @tipocontenido = Tipocontenido.find(params[:id])
    
        respond_to do |format|
          format.html # show.html.erb
          format.json { render json: @tipocontenido }
        end
      end
    
      # GET /tipocontenidos/new
      # GET /tipocontenidos/new.json
      def new
        @tipocontenido = Tipocontenido.new
    
        respond_to do |format|
          format.html # new.html.erb
          format.json { render json: @tipocontenido }
        end
      end
    
      # GET /tipocontenidos/1/edit
      def edit
        @tipocontenido = Tipocontenido.find(params[:id])
      end
    
      # POST /tipocontenidos
      # POST /tipocontenidos.json
      def create
        @tipocontenido = Tipocontenido.new(params[:tipocontenido])
    
        respond_to do |format|
          if @tipocontenido.save
            format.html { redirect_to @tipocontenido, notice: 'Tipocontenido was successfully created.' }
            format.json { render json: @tipocontenido, status: :created, location: @tipocontenido }
          else
            format.html { render action: "new" }
            format.json { render json: @tipocontenido.errors, status: :unprocessable_entity }
          end
        end
      end
    
      # PUT /tipocontenidos/1
      # PUT /tipocontenidos/1.json
      def update
        @tipocontenido = Tipocontenido.find(params[:id])
    
        respond_to do |format|
          if @tipocontenido.update_attributes(params[:tipocontenido])
            format.html { redirect_to @tipocontenido, notice: 'Tipocontenido was successfully updated.' }
            format.json { head :no_content }
          else
            format.html { render action: "edit" }
            format.json { render json: @tipocontenido.errors, status: :unprocessable_entity }
          end
        end
      end
    
      # DELETE /tipocontenidos/1
      # DELETE /tipocontenidos/1.json
      def destroy
        @tipocontenido = Tipocontenido.find(params[:id])
        @tipocontenido.destroy
    
        respond_to do |format|
          format.html { redirect_to tipocontenidos_url }
          format.json { head :no_content }
        end
      end
    end

En mi base de datos mongodb ya tengo un documento en la colección que quiero traer a la vista, pero tal parece que el Modelo no esta trayendo el listado. (Osea la instrucción "Tipocontenido.all" en el controlador que muestro arriba)

Ya intente todo inclusive utilizando scope en el modelo.

Este es mi modelo:

Código:
class Tipocontenido
  include Mongoid::Document
  store_in collection: "ctipocontenido"
  
  field :nombretipo, type: String
  has_one :contenido
  embeds_many :seccion
  
# lo ultimo que en intentado, pero no me trae ni un solo documento. (Solo tengo uno)
  scope :todos, where(nombretipo: "Colores Suaves 3 partes")

end

Estoy trabajando con:

1. Ruby 1.9.3p448
2. Rails 3.2.13
3. Rake version 10.1.0
4. MongoDB shell version: 2.2.3
5. mongoid 3.1.2

Mi documento en mongodb:


Código:
    > db.ctipocontenido.find().pretty()
    {
            "_id" : ObjectId("51edfd3fddbc8d2622000001"),
            "nombretipo" : "Colores Suaves 3 partes",
            "seccion" : [
                    {
                            "_id" : ObjectId("51edfd3fddbc8d2622000002"),
                            "nombre" : "Encabezado",
                            "color" : "#e5e5e5",
                            "borde" : "1px solid red",
                            "etiqueta" : [
                                    {
                                            "_id" : ObjectId("51edfd3fddbc8d2622000003"),
                                            "texto" : "Título",
                                            "tipoletra" : "Verdana",
                                            "tamanioletra" : "7",
                                            "colorletra" : "#000000"
                                    },
                                    {
                                            "_id" : ObjectId("51edfd3fddbc8d2622000004"),
                                            "texto" : "Lema",
                                            "tipoletra" : "Verdana",
                                            "tamanioletra" : "6",
                                            "colorletra" : "#000000"
                                    }
                            ]
                    },
                    {
                            "_id" : ObjectId("51edfd3fddbc8d2622000005"),
                            "nombre" : "Panel Izquierdo",
                            "color" : "#e5e5e5",
                            "borde" : "1px solid red",
                            "etiqueta" : [
                                    {
                                            "_id" : ObjectId("51edfd3fddbc8d2622000006"),
                                            "texto" : "Título",
                                            "tipoletra" : "Verdana",
                                            "tamanioletra" : "7",
                                            "colorletra" : "#000000"
                                    },
                                    {
                                            "_id" : ObjectId("51edfd3fddbc8d2622000007"),
                                            "texto" : "Lema",
                                            "tipoletra" : "Verdana",
                                            "tamanioletra" : "6",
                                            "colorletra" : "#000000"
                                    }
                            ]
                    }
            ]
    }

Y por ultimo les muestro mi archivo gemfile:

Código:
    source 'https://rubygems.org'
    
    gem 'rails', '3.2.13'
    gem 'execjs'
    gem 'therubyracer'
    gem 'sass'
    gem "haml", '3.1.4'
    gem 'haml-rails'
    gem "mongoid", ">= 3.1.2"
    gem 'rake' , '10.1.0'
    gem 'rails3-generators'
    
    
    # rails generate model Book --skip-migration --orm=mongomapper
    # Bundle edge Rails instead:
    # gem 'rails', :git => 'git://github.com/rails/rails.git'
    
    
    
    # Gems used only for assets and not required
    # in production environments by default.
    group :assets do
      gem 'jquery-ui-rails'
      # gem 'jquery-ui-themes', '0.0.7'
      gem 'sass-rails',   '~> 3.2.3'
      gem 'coffee-rails', '~> 3.2.1'
    
      # See https://github.com/sstephenson/execjs#readme for more supported runtimes
      # gem 'therubyracer', :platforms => :ruby
    
      gem 'uglifier', '>= 1.0.3'
    end
    
    gem 'jquery-rails'
    
    # To use ActiveModel has_secure_password
    # gem 'bcrypt-ruby', '~> 3.0.0'
    
    # To use Jbuilder templates for JSON
    # gem 'jbuilder'
    
    # Use unicorn as the app server
    # gem 'unicorn'
    
    # Deploy with Capistrano
    # gem 'capistrano'
    
    # To use debugger
    # gem 'debugger'

Agradezco sus recomendaciones y soluciones...
__________________
Hay una fuerza motriz más poderosa que el vapor, la electricidad y la energía atómica: la voluntad. -Einstein-

Última edición por calichecal; 24/07/2013 a las 14:23
  #2 (permalink)  
Antiguo 24/07/2013, 14:31
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 con Rails y mongoDB: mongoid y un query que no retorna nada

Yo diría que es un problema de rutas a juzgar por el error.

¿Cómo tienes el archivo routes.rb?
  #3 (permalink)  
Antiguo 24/07/2013, 14:44
Avatar de calichecal  
Fecha de Ingreso: junio-2009
Ubicación: Colombia
Mensajes: 288
Antigüedad: 15 años, 5 meses
Puntos: 12
Respuesta: Problema con Rails y mongoDB: mongoid y un query que no retorna nada

Cita:
Iniciado por pzin Ver Mensaje
Yo diría que es un problema de rutas a juzgar por el error.

¿Cómo tienes el archivo routes.rb?
Hola pzin, gracias por contestar, el ruteo lo estoy haciendo manualmente:

Código:
CmsMonrails::Application.routes.draw do
  resources :article_p1s


  get "index/index"
  get "index/registro"
  get "tipocontenidos/index"
  # The priority is based upon order of creation:
  # first created -> highest priority.

  # Sample of regular route:
  #   match 'products/:id' => 'catalog#view'
  # Keep in mind you can assign values other than :controller and :action

  # Sample of named route:
  #   match 'products/:id/purchase' => 'catalog#purchase', :as => :purchase
  # This route can be invoked with purchase_url(:id => product.id)

  # Sample resource route (maps HTTP verbs to controller actions automatically):
  #   resources :products

  # Sample resource route with options:
  #   resources :products do
  #     member do
  #       get 'short'
  #       post 'toggle'
  #     end
  #
  #     collection do
  #       get 'sold'
  #     end
  #   end

  # Sample resource route with sub-resources:
  #   resources :products do
  #     resources :comments, :sales
  #     resource :seller
  #   end

  # Sample resource route with more complex sub-resources
  #   resources :products do
  #     resources :comments
  #     resources :sales do
  #       get 'recent', :on => :collection
  #     end
  #   end

  # Sample resource route within a namespace:
  #   namespace :admin do
  #     # Directs /admin/products/* to Admin::ProductsController
  #     # (app/controllers/admin/products_controller.rb)
  #     resources :products
  #   end

  # You can have the root of your site routed with "root"
  # just remember to delete public/index.html.
  root :to => 'index#index'

  # See how all your routes lay out with "rake routes"

  # This is a legacy wild controller route that's not recommended for RESTful applications.
  # Note: This route will make all actions in every controller accessible via GET requests.
  # match ':controller(/:action(/:id))(.:format)'
end
__________________
Hay una fuerza motriz más poderosa que el vapor, la electricidad y la energía atómica: la voluntad. -Einstein-
  #4 (permalink)  
Antiguo 24/07/2013, 14:51
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 con Rails y mongoDB: mongoid y un query que no retorna nada

Pues ahí está el error. Las rutas están bien, pero tienes que indicar también el controlador para que luego puedas usar tipocontenido_path.

Código Ruby:
Ver original
  1. get "tipocontenidos/index" => "tipocontenido#index"

Debería de funcionar así.

Si luego del cambio ejecutas rake routes verás que efectivamente existe tipocontenido_path. Debería de salir algo así:

Código BASH:
Ver original
  1. tipocontenido GET /tipocontenido/index(.:format) tipocontenido#index
  #5 (permalink)  
Antiguo 24/07/2013, 14:52
Avatar de calichecal  
Fecha de Ingreso: junio-2009
Ubicación: Colombia
Mensajes: 288
Antigüedad: 15 años, 5 meses
Puntos: 12
Respuesta: Problema con Rails y mongoDB: mongoid y un query que no retorna nada

Cita:
Iniciado por pzin Ver Mensaje
Yo diría que es un problema de rutas a juzgar por el error.

¿Cómo tienes el archivo routes.rb?
Otra cosa para mencionar, no se si tenga mucho que ver, pero he cargando el documento en la bd mediante el archivo seeds:


Archivo seeds.rb
Código:
Tipocontenido.create!(

  nombretipo: "Colores Suaves 3 partes",
  seccion: [
    Seccion.new(nombre: "Encabezado",color: "#e5e5e5",borde: "1px solid red", etiqueta: [
       Etiqueta.new(texto: "Título",tipoletra: "Verdana",tamanioletra: "7",colorletra: "#000000"
       ),
       Etiqueta.new(texto: "Lema",tipoletra: "Verdana",tamanioletra: "6",colorletra: "#000000")]
    ),
    Seccion.new(nombre: "Panel Izquierdo",color: "#e5e5e5",borde: "1px solid red", etiqueta: [ 
       Etiqueta.new(texto: "Título",tipoletra: "Verdana",tamanioletra: "7",colorletra: "#000000"
       ),
       Etiqueta.new(texto: "Lema",tipoletra: "Verdana",tamanioletra: "6",colorletra: "#000000")]
       )
  ]
  
)
__________________
Hay una fuerza motriz más poderosa que el vapor, la electricidad y la energía atómica: la voluntad. -Einstein-
  #6 (permalink)  
Antiguo 24/07/2013, 15:04
Avatar de calichecal  
Fecha de Ingreso: junio-2009
Ubicación: Colombia
Mensajes: 288
Antigüedad: 15 años, 5 meses
Puntos: 12
Respuesta: Problema con Rails y mongoDB: mongoid y un query que no retorna nada

Cita:
Iniciado por pzin Ver Mensaje
Pues ahí está el error. Las rutas están bien, pero tienes que indicar también el controlador para que luego puedas usar tipocontenido_path.

Código Ruby:
Ver original
  1. get "tipocontenidos/index" => "tipocontenido#index"

Debería de funcionar así.

Si luego del cambio ejecutas rake routes verás que efectivamente existe tipocontenido_path. Debería de salir algo así:

Código BASH:
Ver original
  1. tipocontenido GET /tipocontenido/index(.:format) tipocontenido#index
lo hice, pero ahora me arroja en la vista:

Código:
Routing Error

uninitialized constant TipocontenidoController
Try running rake routes for more information on available routes.
y lo otro si parece estar bien:

Código:
$ rake routes
         index_index GET /index/index(.:format)          index#index
      index_registro GET /index/registro(.:format)       index#registro
tipocontenidos_index GET /tipocontenidos/index(.:format) tipocontenido#index
                root     /                               index#index
__________________
Hay una fuerza motriz más poderosa que el vapor, la electricidad y la energía atómica: la voluntad. -Einstein-
  #7 (permalink)  
Antiguo 24/07/2013, 15:05
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 con Rails y mongoDB: mongoid y un query que no retorna nada

No entiendo "me cargué el documento de la bd".

Ese archivo no tengo muy claro si sirve de algo. Se que puede ejecutarse con rake db:seeds para que luego cree registros y demás cosas. Es como usar la consola de rails pero a lo bruto.
  #8 (permalink)  
Antiguo 24/07/2013, 15:14
Avatar de calichecal  
Fecha de Ingreso: junio-2009
Ubicación: Colombia
Mensajes: 288
Antigüedad: 15 años, 5 meses
Puntos: 12
Respuesta: Problema con Rails y mongoDB: mongoid y un query que no retorna nada

Cita:
Iniciado por pzin Ver Mensaje
No entiendo "me cargué el documento de la bd".

Ese archivo no tengo muy claro si sirve de algo. Se que puede ejecutarse con rake db:seeds para que luego cree registros y demás cosas. Es como usar la consola de rails pero a lo bruto.
Sirve mucho para cargar datos que tu BD deba tener por defecto. En el caso mio me servirá de mucho pues estoy haciendo un CMS parecido a joomla, entonces necesito que unos datos se ingresen a la bd cuando el usuario ejecute la aplicación por primera vez, entonces aspirto a poder ejecutar ese comando rake mediante programación. , también sirve mucho para trastear el proyecto con el contenido de su BD, crear bases de datos desde allí, en fin, debe tener muchas otras utilidades.
__________________
Hay una fuerza motriz más poderosa que el vapor, la electricidad y la energía atómica: la voluntad. -Einstein-
  #9 (permalink)  
Antiguo 24/07/2013, 15:16
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 con Rails y mongoDB: mongoid y un query que no retorna nada

Cita:
Iniciado por calichecal Ver Mensaje
y lo otro si parece estar bien:

Código:
$ rake routes
         index_index GET /index/index(.:format)          index#index
      index_registro GET /index/registro(.:format)       index#registro
tipocontenidos_index GET /tipocontenidos/index(.:format) tipocontenido#index
                root     /                               index#index
Si entonces tienes que poner tipocontenidos_index_path en el link_to.

Última edición por pzin; 24/07/2013 a las 15:21
  #10 (permalink)  
Antiguo 24/07/2013, 15:59
Avatar de calichecal  
Fecha de Ingreso: junio-2009
Ubicación: Colombia
Mensajes: 288
Antigüedad: 15 años, 5 meses
Puntos: 12
Respuesta: Problema con Rails y mongoDB: mongoid y un query que no retorna nada

Cita:
Iniciado por pzin Ver Mensaje
Si entonces tienes que poner tipocontenidos_index_path en el link_to.
listo , muchas gracias pzin.
__________________
Hay una fuerza motriz más poderosa que el vapor, la electricidad y la energía atómica: la voluntad. -Einstein-
  #11 (permalink)  
Antiguo 25/07/2013, 10:21
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 9 meses
Puntos: 137
Respuesta: Problema con Rails y mongoDB: mongoid y un query que no retorna nada

porque no lo pones como resource en el routes?
__________________
>> abimaelmartell.com

Etiquetas: model, mongodb, query, rails, rubyonrails
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 12:31.