Problema com scaffold

Olá pessoal!
Estou iniciando com Rails… Fiz o seguinte scaffold

Depois fiz o migrate e deu tudo certo

depois fiz

fiz o migrate e depois startei o server.

Quando entro no caminho http://localhost:3000/plantas ele funciona normal, mas quando entro em
http://localhost:3000/especies dá o seguinte erro

[quote] NameError in Especies#index

Showing app/views/especies/index.html.erb where line #22 raised:

undefined local variable or method `new_especie_path’ for #<ActionView::Base:0x474b1e4>

Extracted source (around line #22):

19:
20:

21:
22: <%= link_to ‘New especie’, new_especie_path %>

RAILS_ROOT: D:/INSTAN~1.0-W/rails_apps/bonsai

[/quote]
Porque o de “especies” dá este erro e o de “plantas” não?

por acaso tu alterou o teu routes.rb?

nao alterei nao

tenta acessar o endereço http://localhost:3000/especies/new

ele funciona?

sim, o new ele faz certinho, até inclui no banco… na hora de fazer o show ele dah pau
muito estranho neh…
Obs.: to usando o instantrails

descobri o problema.
Eu fiz varios testes, com mais campos, com outros tipos de campos, só funcionou quando nao utilizei o nome “especie”

Eu fiz o codigo abaixo e funcionou.

Especie deve ser alguma palava chave e ele se embanana :S

Comédia

Em outro gupo me falaram q era para adicionar este inflector (ainda nao descobri o q é)
Enfim, deu certo da seguinte forma :

ActiveSupport::Inflector.inflections do |inflect|
     inflect.irregular 'especie', 'especies'
end 

O problema eh q o Rails considera as formas singular e plural das palavras pra fazer as rotas, e vc usando a palavra ‘especie’ acabou gerando inconsistencia pq o rails eh adaptado pra palavras ingles
Se vc for no console e digitar:

'especie'.pluralize
=> "especies"
'especies'.singularize
=> "especy"

Note q o plural de ‘especie’ pro rails eh ‘especies’, mas o singular de ‘especies’ eh ‘especy’

Quando vc faz o scaffold com ‘especie’ ele gera a classe ‘Especie’ e as view com as rotas no formato ‘new_especie_path’, ‘especies_path’, etc

No routes.rb ele vai gerar um codigo ‘map.resources :especies’, quando vc rodar o servidor ele vai ver esse codigo e vai singularizar ‘especies’ para gerar as rotas, soh que o singular de ‘especies’ eh ‘especy’ (pelas regras do ingles), ai ele gera a rota ‘new_especy_path’

Se vc trocar ‘new_especie_path’ por ‘new_especy_path’ nas viewspára de dar erro, mas a solucao ideal eh isso q vc fez. O que vc adicionou no Inflector eh uma regra dizendo q o plural de ‘especie’ eh ‘especies’ e o singular de ‘especies’ eh ‘especie’

o problema é misturar inglês com português :smiley:
o Ruby On Rails tem todos os padrões ajustados para o inglês, quando tu começa a usar nomes em português para as classes as vezes ele se perde …
Este é um dos motivos para o código no meu livro estar em inglês (claro que todo o resto do texto esta em português :smiley: )
Algumas soluções para este teu problema :smiley:
A primeira é a que tu usou, alterar o nome da classe para alguma que os padrões de nomenclatura do inglês não sejam um problema
Você pode também editar o arquivo config/initializers/inflections.rb e configurar o rails para saber que o plural de especie é especies, ficaria algo parecido com:

Você pode também instalar o plugin “Brazilian Rails” que ja configura o Rails para o portugês.
E a melhor de todas na minha opinião, tu pode programar em ingês, ja que fica muito extranho “if AlgumaCoisaEmPortugues” por que fica parte do código em português e parte em inglês