Hola a todos, a ver si podéis ayudarme un poco (no tengo mucha idea):
En lib/temp_module.rb he creado:
#module TempModule
class Array
def all
map {|x| [x.name, x.id] }
end
def names
map {|x| x.name }
end
end
class ActiveRecord::Base
def self.names
self.find(:all,:select => “name”).map{|g| g.name}
end
def all
self.find(:all).map {|x| [x.name, x.id] } #¿aqui no funciona .all?
end
end
#end
He comentado la declaración de TempModule porque con ella los métodos no
eran visibles (no se si porque creaba un nuevo espacio de nombres y
realmente no llegaba a modificar las clases Array y ActiveRecord). Tal y
cómo está el código ahora funciona, aunque puede que hayan demasiados
accesos a la base de datos. Sin embargo, falla al cargar la libreria
(temp_module) cuando también llamo a otras para exportar datos a csv y
xls:
require ‘temp_module’
require ‘csv’
require ‘spreadsheet/excel’
include Spreadsheet
Es decir, parece que todo funciona perfectamente de forma independiente
pero al utilizarse conjuntamente pasa pasa algo con las dependencias y
no encuentra el método de un módulo (no de una librerÃa, sino de un
módulo):
class HomeController < ApplicationController
require ‘temp_module’
require ‘csv’
require ‘spreadsheet/excel’
include Spreadsheet
…
private
def rows
rs=Mtask.find(params[:id]).results
rowss=rs.map{|r| [r.mtask_id, r.ident ,r.author]} # falla al hacer
r.author
#…
rowss
end
end
Por otra parte, en log/development.log aparece:
NoMethodError (undefined method author' for #<Result:0xb77ca134>): /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.2/lib/active_record/base.rb:1861:in
method_missing’
.//app/controllers/home_controller.rb:144:in rows' /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.2/lib/active_record/associations/association_proxy.rb:123:in
method_missing’
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.2/lib/active_record/associations/has_many_association.rb:98:in
`method_missing’
Y he probado rs.map{|r| [r.mtask_id, r.ident ,r.author]} desde la
consola y funciona.
¿Alguien puede darme una pista? Gracias.