Este capítulo es en la adición de recordar fichas para garantizar que el usuario signin estado es recordado y que la sesión sólo se borra cuando el usuario firma explícitamente. Entiendo la importancia de tener esta característica en mi aplicación, así que quiero asegurarme de que funciona correctamente. Me estoy poniendo un montón de errores, sin embargo, cuando corroCapítulo 8 carriles Tutorial Recuerde errores Token
$ bundle exec rspec spec/
y sospecho que tienen que ver con mi modelo de usuario, ya que todos menos uno contienen:
NoMethodError:
undefined method `remember_token=' for #<User:...>
y el último contiene
Failure/Error: it { should respond_to(:remember_token) }
y luego apunte a mis user_spec.rb, user.rb y authentication_pages_spec.rb y archivos, que he incluido la mayor parte de (las partes pertinentes) aquí.
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+\-.][email protected][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
y el comienzo de 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: "[email protected]",
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
.
.
.
Cualquier ayuda sería muy apreciada!
Esto solucionó mi problema ya que solo estaba en Heroku. Traté de probar el registro antes de migrar. Después de eso, incluso 'heroku run db: migrate' no solucionaría el problema. Como de costumbre, debería haber intentado apagarlo y encenderlo de nuevo. – brodney