Note that there are some explanatory texts on larger screens.

plurals
  1. PORailsTutorial 10.1 giving persistent "undefined local variable or method 'authenticate'" errors
    primarykey
    data
    text
    <p>I am very new to programming, and so far I've had no big issues with Rails Tutorial. </p> <p>But when I hit 10.1, I started getting the same errors over and over again and I'm not sure why. I have looked up similar issues at the RailsTutorial Get Satisfaction group <a href="http://getsatisfaction.com/railstutorial/topics/listing_10_15_causes_user_validation_failure_running_rspec" rel="nofollow">here</a>. </p> <p>Thanks in advance for your help.</p> <p><strong>Failures:</strong></p> <pre><code>1) UsersController GET 'edit should be successful Failure/Error: get :edit, :id =&gt; @other_user undefined local variable or method `authenticate' for #&lt;UsersController:0x270dc60&gt; # ./spec/controllers/users_controller_spec.rb:115:in `block (3 levels) in &lt;top (required)&gt;' 2) UsersController GET 'edit should have right title Failure/Error: get :edit, :id =&gt; @other_user undefined local variable or method `authenticate' for #&lt;UsersController:0x1ff7aac&gt; # ./spec/controllers/users_controller_spec.rb:120:in `block (3 levels) in &lt;top (required)&gt;' </code></pre> <p><strong>Here's the spec documentation:</strong></p> <pre><code>require 'spec_helper' describe UsersController do render_views describe "GET 'show'" do before(:each) do @user = Factory(:user) end it "should be successful" do get :show, :id =&gt; @user.id response.should be_success end it "should find the right user" do get :show, :id =&gt; @user assigns(:user).should == @user end it "should have the right title, the user's name" do get :show, :id =&gt; @user response.should have_selector('title', :content =&gt; @user.name) end it "should have the user's name" do #in the body of the profile get :show, :id =&gt; @user response.should have_selector('h1', :content =&gt; @user.name) end it "should have a profile image" do get :show, :id =&gt; @user response.should have_selector('h1&gt;img', :class =&gt; "gravatar") end it "should have the right URL" do get :show, :id =&gt; @user response.should have_selector('td&gt;a', :content =&gt; user_path(@user), :href =&gt; user_path(@user)) end end describe "GET 'new'" do it "should be successful" do get :new response.should be_success end it "should have the right title" do get :new response.should have_selector("title", :content =&gt; "Sign up") end end describe "POST 'create'" do before(:each) do @attr = {:name =&gt; "", :email =&gt; "", :password =&gt; "", :password_confirmation =&gt; ""} end it "should not create a user" do lambda do post :create, :user =&gt; @attr end.should_not change(User, :count) end it "should have the right title" do post :create, :user =&gt; @attr response.should have_selector('title', :content=&gt; "Sign up") end it "should render the 'new' page" do post :create, :user =&gt; @attr response.should render_template('new') end describe "success" do before(:each) do @attr={ :name =&gt; "A Chowdhury", :email =&gt; "achowdhury@gmail.com", :password =&gt; "cqsoqaqa", :password_confirmation =&gt; "cqsoqaqa"} end it "should create a user" do lambda do post :create, :user =&gt; @attr end.should change(User, :count).by(1) end it "should sign the user in" do post :create, :user =&gt; @attr controller.should be_signed_in end it "should redirect to the user 'show' page" do post :create, :user =&gt; @attr response.should redirect_to(user_path(assigns(:user))) end it "should have a welcome message" do post :create, :user =&gt; @attr flash[:success].should =~ /welcome to the sample app/i end end end describe "GET 'edit" do before(:each) do @other_user = Factory(:user) test_sign_in(@other_user) end it "should be successful" do get :edit, :id =&gt; @other_user response.should be_success end it "should have right title" do get :edit, :id =&gt; @other_user response.should have_selector('title', :content =&gt; "Edit user") end end end </code></pre> <p><strong>And the Users Controller:</strong> </p> <pre><code>class UsersController &lt; ApplicationController before_filter :authenticate, :only =&gt; [:edit, :update] def show @user = User.find(params[:id]) @title = @user.name end def new @user= User.new @title= "Sign up" end def create @user = User.new(params[:user]) if @user.save sign_in @user redirect_to @user flash[:success] = "Welcome to the Sample App!" else @title = "Sign up" render 'new' end end def edit @user = "Edit user" end end Factory.define :user do |user| user.name "Joynul Choudhury" user.email "jcny816@example.com" user.password "foobar" user.password_confirmation "foobar" end </code></pre> <p><strong>UPDATE: authenticate method in User.rb</strong></p> <pre><code>class User &lt; ActiveRecord::Base attr_accessor :password attr_accessible :name, :email, :password, :password_confirmation email_regex = /\A[\w+\-.]+@[a-zA-Z\d\-.]+\.[a-z]+\z/i validates :name, :presence =&gt; true, :length =&gt; { :maximum =&gt; 50 } validates :email, :presence =&gt; true, :format =&gt; { :with=&gt; email_regex }, :uniqueness =&gt; { :case_sensitive =&gt; false } validates :password, :presence =&gt; true, :confirmation =&gt; true, :length =&gt; { :within =&gt; 6..40 } before_save :encrypt_password # Return true if the user's password matches the submitted password. def has_password?(submitted_password) # Compare encrypted_password with the encrypted version of # submitted_password. encrypted_password==encrypt(submitted_password) end def User.authenticate(email, submitted_password) user= find_by_email(email) return nil if user.nil? return user if user.has_password?(submitted_password) end def User.authenticate_with_salt(id, cookie_salt) user = find_by_id(id) return nil if user.nil? return user if user.salt == cookie_salt end private def encrypt_password self.salt = make_salt if new_record? self.encrypted_password = encrypt(password) end def encrypt(string) secure_hash("#{salt}--#{string}") end def make_salt secure_hash("#{Time.now.utc}--#{password}") end def secure_hash(string) Digest::SHA2.hexdigest(string) end end </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload