3

Michael Hartl による Ruby on Rails チュートリアルを完了しようとしていますが、第 8 章で行き詰まっています。テストを実行すると、同じ 2 つのエラーが発生します。

NoMethodError: 未定義のメソッドremember_token=' ActionView::Template::Error: undefined methodfind_by_remember_token'

私はコーディングとプログラミングに非常に慣れていないので、何を投稿すればよいか正確にわからないので、人々が私の質問を手伝うことができます. :remember_token と find_by_remember_token の両方を定義したような気がします。以下のコードに :remember_token が表示される各インスタンスを含めました。

sample_app/app/helpers/sessions_helper.rb:
    2  
    3    def sign_in(user)
    4:     cookies.permanent[:remember_token] = user.remember_token
    5      self.current_user = user
    6    end
    .
   15  
   16    def current_user
   17:     @current_user ||= User.find_by_remember_token(cookies[:remember_token])
   18    end
   19  
   20    def sign_out
   21      self.current_user = nil
   22:     cookies.delete(:remember_token)
   23    end
   24  end

sample_app/app/models/user.rb:
   16  
   17    before_save { |user| user.email = email.downcase }
   18:   before_save :create_remember_token
   19  
   20    validates :name, presence: true, length: { maximum: 50 }
   ..
   27    private
   28  
   29:     def create_remember_token
   30:       self.remember_token = SecureRandom.urlsafe_base64
   31      end
   32  end

sample_app/db/migrate/[timestamp]_add_remember_token_to_users.rb:
    1  class AddRememberTokenToUsers < ActiveRecord::Migration
    2    def change
    3:     add_column :users, :remember_token, :string
    4:     add_index  :users, :remember_token
    5    end
    6  end

sample_app/spec/models/user_spec.rb:
   27    it { should respond_to(:password) }
   28    it { should respond_to(:password_confirmation) }
   29:   it { should respond_to(:remember_token) }
   30    it { should respond_to(:authenticate) }
   31  
   ..
  125    describe "remember token" do
  126      before { @user.save }
  127:     its(:remember_token) { should_not be_blank }
  128    end
  129  end

sample_app/spec/support/utilities.rb:
    7    click_button "Sign in"
    8    # Sign in when not using Capybara as well.
    9:   cookies[:remember_token] = user.remember_token
   10  end`
4

3 に答える 3

7

私もこの問題を抱えていました。グーグルで調べた後、これらの端末コマンドを実行していることがわかりました...

rake db:drop
rake db:create
rake db:migrate

...私を元気づけて、再び走らせました。

それがあなたにとってもうまくいくことを願っています。私はそれがどれほどイライラするかを知っています。

于 2013-03-28T07:49:51.957 に答える
1

ユーザーモデル app/model/user.rb に attr_accessor :remember_token を含めるのを忘れていました

そのため、テストでエラーが発生しました:

未定義のメソッド「remember_token=」

于 2015-03-19T05:27:16.380 に答える
1

はい、このエラーは、 User Modelに属性 remember_token がないためです。

正しいデータベース移行ファイルがあることを確認してから、次のことを行います。

rake db:drop
rake db:create
rake db:migrate

または略して:

rake db:reset
于 2013-07-05T07:57:14.343 に答える