Chapter 8 Rails Tutorial Remember Token Errors
remember-me, ruby-on-rails
Solution
If you get this error in production on Heroku, after you run:
heroku run rake db:migrate
you need to restart your app:
heroku restart
Problem
This chapter is on adding remember tokens to ensure that the user signin status is remembered and that the session is only cleared when the user explicitly signs out. I understand the importance of having this feature in my app, so want to make sure that it works correctly. I'm getting a bunch of errors though, when I run ``` $ bundle exec rspec spec/ ``` and I suspect they have to do with my user model, as they all but one contain: ``` NoMethodError: undefined method `remember_token=' for #<User:...> ``` and the last contains ``` Failure/Error: it { should respond_to(:remember_token) } ``` and then point to my user_spec.rb, user.rb, and and authentication_pages_spec.rb files, which I have included most of (the pertinent parts) here. user.rb: ``` # == Schema Information # # Table name: users # # id :integer not null, primary key # name :string(255) # email :string(255) # created_at :datetime not null # updated_at :datetime not null # class User < ActiveRecord::Base attr_accessible :name, :email, :password, :password_confirmation has_secure_password before_save { |user| user.email = email.downcase } before_save :create_remember_token validates :name, presence: true, length: { maximum: 50 } VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }, uniqueness: { case_sensitive: false } validates :password, length: { minimum: 6 } validates :password_confirmation, presence: true private def create_remember_token self.remember_token = SecureRandom.urlsafe_base64 end end ``` authentication_pages_spec.rb: ``` require 'spec_helper' describe "Authentication" do subject {page} describe "signin page" do before { visit signin_path } it {should have_selector('h1', text: 'Sign in')} it {should have_selector('title', text: 'Sign in')} end describe "signin" do before {visit signin_path} describe "with invalid information" do before {click_button "Sign in"} it {should have_selector('title', text: 'Sign in')} it {should have_selector('div.alert.alert-error', text: 'Invalid')} describe "after visiting another page" do before { click_link "Home" } it { should_not have_selector('div.alert.alert-error') } end end describe "with valid information" do let(:user) { FactoryGirl.create(:user) } before do fill_in "Email", with: user.email fill_in "Password", with: user.password click_button "Sign in" end it { should have_selector('title', text: user.name) } it { should have_link('Profile', href: user_path(user)) } it { should have_link('Sign out', href: signout_path) } it { should_not have_link('Sign in', href: signin_path) } end end end ``` and the beginning of user_spec.rb: ``` # == Schema Information # # Table name: users # # id :integer not null, primary key # name :string(255) # email :string(255) # created_at :datetime not null # updated_at :datetime not null # require 'spec_helper' describe User do before do @user = User.new(name: "Example User", email: "user@example.com", password: "foobar", password_confirmation: "foobar") end subject { @user } it { should respond_to(:name) } it { should respond_to(:email) } it { should be_valid } it { should respond_to(:password_digest) } it { should respond_to(:password) } it { should respond_to(:password_confirmation) } it { should respond_to(:authenticate) } it { should respond_to(:remember_token) } describe "remember token" do before { @user.save } its(:remember_token) { should_not be_blank } end . . . ``` Any help would be much appreciated!