Criando uma Classe e Fazendo um Require da Mesma

Resolvi escrever esse post devido a essa seguinte duvida no grupo rails_br:

"Eu criei um arquivo dentro da pasta /lib para manter os estados do Brasil
que vou usar no cadastro da minha app, mas quando chamei na minha via eu
recebo essa mensagem de erro:
"uninitialized constant ActionView::CompiledTemplates::STATES". Também 
já adicionei a pasta lib pra ser carregada pelo rails, mas mesmo assim,
não resolveu. O código que usei para adicionar a pasta /lib para o 
autoload_paths do rails:
config.autoload_paths << File.join(config.root, "/lib")
O código da minha constante: https://gist.github.com/1822459
O que esta faltando?"

Primeira coisa a fazer é criar uma classe dentro da pasta lib no root da aplicação. Eu coloquei o nome do arquivo de states.rb

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# encoding: utf-8
class States

  NAMES = [
      [ "AC", "Acre" ],
      [ "AL", "Alagoas" ],
      [ "AM", "Amazonas" ],
      [ "AP", "Amapá" ],
      [ "BA", "Bahia" ],
      [ "CE", "Ceará" ],
      [ "DF", "Distrito Federal" ],
      [ "ES", "Espírito Santo" ],
      [ "GO", "Goiás" ],
      [ "MA", "Maranhão" ],
      [ "MT", "Mato Grosso" ],
      [ "MS", "Mato Grosso do Sul" ],
      [ "MG", "Minas Gerais" ],
      [ "PA", "Pará" ],
      [ "PB", "Paraíba" ],
      [ "PR", "Paraná" ],
      [ "PE", "Pernambuco" ],
      [ "PI", "Piauí" ],
      [ "RJ", "Rio de Janeiro" ],
      [ "RN", "Rio Grande do Norte" ],
      [ "RO", "Rondônia" ],
      [ "RS", "Rio Grande do Sul" ],
      [ "RR", "Roraima" ],
      [ "SC", "Santa Catarina" ],
      [ "SE", "Sergipe" ],
      [ "SP", "São Paulo" ],
      [ "TO", "Tocantins" ]
  ]

end

Em seguida faço um require do arquivo dentro ApplicationController:

1
2
3
4
require 'states'
class ApplicationController < ActionController::Base
  protect_from_forgery
end

E por fim dentro da view:

1
<%= f.select :state, States::NAMES, { :prompt => "Selecione o Estado"} %>

Simples e Rápido lol.

Comments