tutorial rails que ejemplos descargar curso caracteristicas ruby-on-rails ruby

ruby on rails - ejemplos - ¿Dónde colocar clases personalizadas para que estén disponibles globalmente para la aplicación Rails?



ruby on rails tutorial (3)

Tengo una clase que estoy tratando de usar en mi controlador en la acción de índice.

Para simplificarlo, se ve así

class PagesController < ApplicationController def index @front_page = FrontPage.new end end

FrontPage es una clase que he definido. Para incluirlo, lo he colocado en la carpeta / lib /. He intentado require ''FrontPage'' , require ''FrontPage.rb'' , require ''front_page'' , y cada uno de ellos con la ruta precedida, por ejemplo require_relative ''../../lib/FrontPage.rb''

Sigo recibiendo uno de los siguientes mensajes: cannot load such file -- /Users/josh/src/ruby/rails/HNReader/lib/front_page o uninitialized constant PagesController::FrontPage

¿Dónde coloco este archivo / cómo lo incluyo en un controlador para poder instanciar un objeto?

Esto es Rails 3.1.3, Ruby 1.9.2, OS X Lion


Debería poder usar require ''front_page'' si está colocando front_page.rb en algún lugar de su ruta de carga. Es decir: esto debería funcionar:

require ''front_page'' class PagesController < ApplicationController def index @front_page = FrontPage.new end end

Para verificar su ruta de carga, intente esto:

$ rails console ree-1.8.7-2011.03 :001 > puts $: /Users/scottwb/src/my_app/lib /Users/scottwb/src/my_app/vendor /Users/scottwb/src/my_app/app/controllers /Users/scottwb/src/my_app/app/helpers /Users/scottwb/src/my_app/app/mailers /Users/scottwb/src/my_app/app/models /Users/scottwb/src/my_app/app/stylesheets # ...truncated...

Puedes ver en este ejemplo, la primera línea es el directorio lib del proyecto, que es donde front_page.rb vive tu front_page.rb .

Otra cosa que puedes hacer es agregar esto en tu config/application.rb :

config.autoload_paths += %W(#{config.root}/lib)

Eso debería hacerlo para que ni siquiera necesites el require ; en su lugar, Rails lo cargará automáticamente (y todo lo demás en su directorio de lib , así que tenga cuidado).


El archivo fue nombrado FrontPage.rb . Cambiar el nombre a ''front_page.rb'', pero dejar el nombre de la clase como ''FrontPage'' resolvió el problema.


Solo necesitamos cargar el archivo,

class PagesController < ApplicationController require ''front_page.rb'' def index @front_page = FrontPage.new end end

lib / front_page.rb

class FrontPage end

También podemos configurar la application.rb para cargar automáticamente estos archivos

# Custom directories with classes and modules you want to be autoloadable. # config.autoload_paths += %W(#{config.root}/extras)

La segunda opción sería una solución preferible.