Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ricardo Nunes

Livro Urubatan

Recommended Posts

Boa tarde pessoal,

 

Estou iniciando neste universo e confesso que tem sido muito divertido. Comprei o livro do Urubatan, afim de ter uma referência para estudo mas logo no início encntrei um problema.

 

Já tentei repetir todo o procedimento três vezes e o mesmo erro persiste:

 

NoMethodError in SessionsController#create

undefined method 'first' for #<Class:0xb61979ac>

 

vendor/rails/activerecord/lib/active_record/base.rb:1532:in 'method_missing'

app/models/user.rb:18:in 'logon'

app/controllers/sessions_controller.rb:7:in 'create'

 

Aparentemente o session_controller está correto, já revisei o código várias vezes e não consigo identificar o que fiz de errado. Alguém tem idéia do que poderia ser esse problema?

 

Abaixo seguem os arquivos user.rb, routes.br, e sessions_controller.rb :

 

SessionController

 

class SessionsController < ApplicationController
 def new
 end

 def create
   @user = User.logon(params[:login],params[:password])
   if @user
     session[:user_id] = @user.id
     destiny = session[:return_to] || root_path
     redirect_to destiny
   else
     flash[:notice] = "O login falhou, verifique o nome de usuário e senha informados"
     render :action => "new"
   end
 end

 def destroy
   session[:user_id] = nil
   redirect_to new_session_path
 end

end

 

Model User

 

class User < ActiveRecord::Base
 has_many :project_memberships, :conditions => "leaved is null"
 has_many :time_logs
 has_many :projects, :through => :project_memberships

 validates_presence_of :login, :password, :name, :email
 validates_length_of :login, :in => 5..100
 validates_length_of :password, :in => 5..50
 validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/
 validates_uniqueness_of :login
 validates_uniqueness_of :email

 def self.logon(username_or_email,password)
   user = User.first :conditions => ["(login = ? or email = ?) and password = ?",username_or_email,username_or_email,password]
   user
 end
end

 

Routes

 

ActionController::Routing::Routes.draw do |map|

 map.resources :sessions

 map.resources :users do |usr|
   usr.resources :time_logs
   usr.resources :project_memberships
 end

 map.resources :projects do |proj|
   proj.resources :task_types do |tt|
      tt.resources :time_logs
   end
   proj.resources :project_memberships
 end

 map.root :controller => "projects"

 # Install the default routes as the lowest priority.
 map.connect ':controller/:action/:id'
 map.connect ':controller/:action/:id.:format'
end

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigão! beleza?

 

Bem analisando seu código o que vi de errado até meu ver é a falta do "=>" você so colocou "=" no controller SessionController.

 

A linha errada está:

 

flash[:notice] = "O login falhou, verifique o nome de usuário e senha informados"

 

Ao invés de:

 

flash[:notice] => "O login falhou, verifique o nome de usuário e senha informados"

 

Isso está implicando no erro.

 

Se não me engano o livro do Urubatan tem 3 erradas fortes.

 

De uma olhada no site do altor para informações e não ficar viajando!

 

No meu site tem algumas video aulas de Rails3 se quiser da um olhada: Lugar do Site

Abraços.. fique com Deus!

 

Boa tarde pessoal,

 

Estou iniciando neste universo e confesso que tem sido muito divertido. Comprei o livro do Urubatan, afim de ter uma referência para estudo mas logo no início encntrei um problema.

 

Já tentei repetir todo o procedimento três vezes e o mesmo erro persiste:

 

NoMethodError in SessionsController#create

undefined method 'first' for #<Class:0xb61979ac>

 

vendor/rails/activerecord/lib/active_record/base.rb:1532:in 'method_missing'

app/models/user.rb:18:in 'logon'

app/controllers/sessions_controller.rb:7:in 'create'

 

Aparentemente o session_controller está correto, já revisei o código várias vezes e não consigo identificar o que fiz de errado. Alguém tem idéia do que poderia ser esse problema?

 

Abaixo seguem os arquivos user.rb, routes.br, e sessions_controller.rb :

 

SessionController

 

class SessionsController < ApplicationController
 def new
 end

 def create
   @user = User.logon(params[:login],params[:password])
   if @user
     session[:user_id] = @user.id
     destiny = session[:return_to] || root_path
     redirect_to destiny
   else
     flash[:notice] = "O login falhou, verifique o nome de usuário e senha informados"
     render :action => "new"
   end
 end

 def destroy
   session[:user_id] = nil
   redirect_to new_session_path
 end

end

 

Model User

 

class User < ActiveRecord::Base
 has_many :project_memberships, :conditions => "leaved is null"
 has_many :time_logs
 has_many :projects, :through => :project_memberships

 validates_presence_of :login, :password, :name, :email
 validates_length_of :login, :in => 5..100
 validates_length_of :password, :in => 5..50
 validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/
 validates_uniqueness_of :login
 validates_uniqueness_of :email

 def self.logon(username_or_email,password)
   user = User.first :conditions => ["(login = ? or email = ?) and password = ?",username_or_email,username_or_email,password]
   user
 end
end

 

Routes

 

ActionController::Routing::Routes.draw do |map|

 map.resources :sessions

 map.resources :users do |usr|
   usr.resources :time_logs
   usr.resources :project_memberships
 end

 map.resources :projects do |proj|
   proj.resources :task_types do |tt|
      tt.resources :time_logs
   end
   proj.resources :project_memberships
 end

 map.root :controller => "projects"

 # Install the default routes as the lowest priority.
 map.connect ':controller/:action/:id'
 map.connect ':controller/:action/:id.:format'
end

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde Jhonatan,

 

Cara, muito obrigado pela ajuda mas o problema não é este, aquele trecho de código é exatamente como está descrito. Inicialmente eu pensei que fosse isso também, mas a própria IDE acusa um erro de sintaxe quando você tenta utilizar "=>".

 

O que me deixou confuso é essa maldita mensagem: "method_missing".

 

Sobre o site do Urubatan, eu já havia verificado as erratas dele e não há nada relacionado a isto. Tentei entrar em contato com ele mas até agora não obtive resposta também.

 

Fico muito grato pela ajuda, já tenho buscado esta informação há duas semanas e você foi a única pessoa que entrou em contato. Valeu mesmo pela tentativa.

 

Vou tentar contato com o Urubatan novamente para ver se consigo uma ajuda.

 

Abraços!

 

Olá amigão! beleza?

 

Bem analisando seu código o que vi de errado até meu ver é a falta do "=>" você so colocou "=" no controller SessionController.

 

A linha errada está:

 

flash[:notice] = "O login falhou, verifique o nome de usuário e senha informados"

 

Ao invés de:

 

flash[:notice] => "O login falhou, verifique o nome de usuário e senha informados"

 

Isso está implicando no erro.

 

Se não me engano o livro do Urubatan tem 3 erradas fortes.

 

De uma olhada no site do altor para informações e não ficar viajando!

 

No meu site tem algumas video aulas de Rails3 se quiser da um olhada: Lugar do Site

Abraços.. fique com Deus!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.