Foros del Web » Programando para Internet » Ruby »

Problema haciendo Concern Ruby on Rails --> NameError in PostsController#index

Estas en el tema de Problema haciendo Concern Ruby on Rails --> NameError in PostsController#index en el foro de Ruby en Foros del Web. Hola, estoy aprendiendo RoR y llevo ya varias horas tratando de solucionar este problema, no sé qué está mal, creé un Concern para subir archivos ...
  #1 (permalink)  
Antiguo 27/02/2015, 01:28
 
Fecha de Ingreso: enero-2015
Ubicación: Tegucigalpa
Mensajes: 25
Antigüedad: 9 años, 11 meses
Puntos: 0
Pregunta Problema haciendo Concern Ruby on Rails --> NameError in PostsController#index

Hola, estoy aprendiendo RoR y llevo ya varias horas tratando de solucionar este problema, no sé qué está mal, creé un Concern para subir archivos al servidor cuando se crea un post y cuando se quiere cargar un archivo ya con el post creado, pero me da el error que coloqué en el título del tema, el Concern se llama "Picturable" que lo tengo en app/models/concerns/Picturable.rb aquí dejo el código de los archivos:

(El concern está bien porque cuando lo tenía unicamente en Attachment, funcionaba perfectamente, falla cuando lo convierto a Concern).

Este es el Concern, que está en: app/models/concerns/Picturable.rb

Código RUBY:
Ver original
  1. module Picturable
  2.     extend ActiveSupport::Concern
  3.  included do
  4.      after_save :guardar_imagen
  5.  end
  6.  
  7.   PATH_ARCHIVOS = File.join Rails.root, "public", "archivos"
  8.  
  9.   def archivo=(archivo)
  10.     unless archivo.blank?
  11.         @archivo = archivo
  12.         if self.respond_to?(:nombre)
  13.           self.nombre = archivo.original_filename
  14.         end
  15.         self.extension = archivo.original_filename.split(".").last.downcase                                                                
  16.     end
  17.   end
  18.  
  19.   def path_archivo
  20.     File.join PATH_ARCHIVOS, "#{self.id}.#{self.extension}"
  21.   end
  22.  
  23.   def tiene_archivo?
  24.     File.exists? path_archivo
  25.   end
  26.  
  27.   private
  28.   def guardar_imagen
  29.     if @archivo
  30.         FileUtils.mkdir_p PATH_ARCHIVOS
  31.         File.open(path_archivo, "wb") do |f|
  32.             f.write(@archivo.read)            
  33.         end
  34.         @archivo = nil
  35.     end
  36.   end
  37. end
---------------------------------------------------------------------------------------
Aquí llamo al Concern: app/models/post.rb
Código RUBY:
Ver original
  1. class Post < ActiveRecord::Base
  2.   belongs_to :usuario
  3.   has_many :attachments # Un post puede tener muchos Attachments
  4.   validates :titulo, presence: true, uniqueness: true
  5.   include Picturable #Llamar al Concern (AQUI ME MARCA ERROR!!)
  6. end
----------------------------------------------------------------------------------------
Y aquí también llamo al Concern: app/models/attachment.rb
Código RUBY:
Ver original
  1. class Attachment < ActiveRecord::Base
  2.   belongs_to :post # Pertenece a: :post
  3.   include Picturable #Llamar al Concern (AQUI ME MARCA ERROR TAMBIEN!!)
  4. end
---------------------------------------------------------------------------------------

Me marca error en el CONTROLADOR del post y del attachment en su acción INDEX resumiendo, en esta parte:
#Ruta: /app/controllers/posts_controller.rb
Código RUBY:
Ver original
  1. class PostsController < ApplicationController
  2.   before_action :set_post, only: [:show, :edit, :update, :destroy]
  3.   before_action :authenticate_usuario!, except: [:show, :index]
  4.  
  5.   # GET /posts
  6.   # GET /posts.json
  7.   def index
  8.     @posts = Post.all #AQUI MARCA ERROR!!!
  9.   end
  10.   ...
  11.   ...
  12. end
(al igual que en el controlador del attachment)
----------------------------------------------------------------------------------
Para finalizar el error completo que me lanza el browser dice:

NameError in PostsController#index
uninitialized constant Post::Picturable

Si me ayudaran a solventar este problema les agradecería mucho!
  #2 (permalink)  
Antiguo 27/02/2015, 13:40
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 haciendo Concern Ruby on Rails --> NameError in PostsController#i

Hola que tal, bueno hagamos esto.

Entra en la consola ( rails c ) dentro de tu proyecto.

Ya adentro realiza la consulta:

p = Post.all
a = Attachment.all

# Comenta por mientras las relaciones belongs_to y has_many de tus modelos.

Ve que te retornen valores correctamente.

Si te retorna valor pasamos a las relaciones de las tablas:

has_many => Indicara que tiene uno o muchos...
belongs_to => Indicara que muchos tienen un...

* Para esto te recomiendo buscar en internet el uso de has_many y belongs_to ( Esta pagina te puede ayudar un poco http://www.theodinproject.com/ruby-o...d-associations )

Ya con esta informacion, se hace la referencia de los modelos.
__________________
Your Code as a Crime Scene...
  #3 (permalink)  
Antiguo 01/03/2015, 01:28
 
Fecha de Ingreso: enero-2015
Ubicación: Tegucigalpa
Mensajes: 25
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Problema haciendo Concern Ruby on Rails --> NameError in PostsController#i

Hola drako_darpan, fijate que pruebo a hacer la consulta en la consola y solo me devuelve los registros cuando comento la parte de inclusión del concern # include Picturable, no entiendo por qué falla, qué tengo de malo?
  #4 (permalink)  
Antiguo 03/03/2015, 13: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 haciendo Concern Ruby on Rails --> NameError in PostsController#i

Intenta nombrando el archivo todo en minusculas, tambien intenta reiniciando spring ya que muchas veces son problemas de caché.
__________________
>> abimaelmartell.com

Etiquetas: controller, 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 01:21.