यह अध्याय यह सुनिश्चित करने के लिए टोकन को याद रखने पर है कि उपयोगकर्ता साइनइन स्थिति याद रखी जाती है और सत्र केवल तभी साफ़ किया जाता है जब उपयोगकर्ता स्पष्ट रूप से संकेत देता है। मैं अपने ऐप में यह सुविधा रखने के महत्व को समझता हूं, इसलिए यह सुनिश्चित करना चाहता हूं कि यह सही तरीके से काम करता है। मैं त्रुटियों की एक गुच्छा हो रही है, हालांकि, जब मैंअध्याय 8 रेल ट्यूटोरियल टोकन त्रुटियों को याद रखें
$ bundle exec rspec spec/
चलाने के लिए और मुझे लगता है वे मेरे उपयोगकर्ता मॉडल के साथ क्या करना है, के रूप में वे सभी लेकिन एक होते हैं:
NoMethodError:
undefined method `remember_token=' for #<User:...>
और पिछले शामिल
Failure/Error: it { should respond_to(:remember_token) }
और फिर मेरी user_spec.rb, user.rb, और और authentication_pages_spec.rb फ़ाइलें, जो मैं से ज्यादातर (उचित भागों) यहाँ शामिल किया है को इंगित।
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
और 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
.
.
.
किसी भी मदद की बहुत सराहना की जाएगी!
यह मेरी समस्या को ठीक करता है क्योंकि यह केवल हीरोकू पर था। मैंने माइग्रेट करने से पहले साइन अप करने का प्रयास किया। उसके बाद, यहां तक कि 'Heroku run db: माइग्रेट' भी समस्या को ठीक नहीं करेगा। हमेशा की तरह, मुझे इसे बार-बार चालू करने की कोशिश करनी चाहिए थी। – brodney