0

私はコーディングと Mhartl チュートリアルの第 8 章にまったく慣れておらず、exec rspec spec/ をバンドルしようとしたときに 34 個のエラーに遭遇しました。残念ながら、エラー 19 ~ 34 しか確認できません (1 ~ 18 は私の端末に収まりません)。

Static pages About page it should behave like all static pages
<[31mFailure/Error:<-[0m <[31mbefore { visit root_path }<]0m
<[31mActionView:Template::Error<[0m:
  <[31mSQLite3::SQLException: no such column: users.remember_token: SELECT
"users".* FROM "users" WHERE "users"."remember_token" = 'lotsofrandomcharacters' LIMIT     1<[0m

それがエラー 19 です。他のエラーも同様で、以下を参照してください。

Static pages Help page
Static pages Help page it should behave like all static pages
Static pages Help page it should behave like all static pages
Static pages Home page
Static pages Home page it should behave like all static pages
Static pages Home page it should behave like all static pages
Static pages Contact page
Static pages Contact page it should behave like all static pages
Static pages Contact page it should behave like all static pages
User
User remember token remember_token
User return value of authenticate method with valid password
User return value of authenticate method with valid password
User when email address is already taken

私はプログラミングの初心者であり、これを受け入れるのは非常に圧倒されます。

この章で作業したファイルのいくつかを次に示します。

アプリ/ビュー/レイアウト/_header.html.erb

<header class="navbar navbar-fixed-top navbar-inverse">
  <div class="navbar-inner">
    <div class="container">
      <%= link_to "sample app", root_path, id: "logo" %>
      <nav>
        <ul class="nav pull-right">
          <li><%= link_to "Home", root_path %></li>
          <li><%= link_to "Help", help_path %></li>
          <% if signed_in? %>
            <li><%= link_to "Users", '#' %></li>
            <li id="fat-menu" class="dropdown">
              <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                Account <b class="caret"></b>
              </a>
              <ul class="dropdown-menu">
                <li><%= link_to "Profile", current_user %></li>
                <li><%= link_to "Settings", '#' %></li>
                <li class="divider"></li>
                <li>
                  <%= link_to "Sign out", signout_path, method: "delete" %>
                </li>
              </ul>
            </li>
          <% else %>
            <li><%= link_to "Sign in", signin_path %></li>
          <% end %>
        </ul>
      </nav>
    </div>
  </div>
</header>

アプリ/ヘルパー/sessions_helper.rb

module SessionsHelper

  def sign_in(user)
    remember_token = User.new_remember_token
    cookies.permanent[:remember_token] = remember_token
    user.update_attribute(:remember_token, User.encrypt(remember_token))
    self.current_user = user
  end

  def signed_in?
    !current_user.nil?
  end

  def current_user=(user)
    @current_user = user
  end

  def current_user
    remember_token = User.encrypt(cookies[:remember_token])
    @current_user ||= User.find_by(remember_token: remember_token)
  end

  def sign_out
    self.current_user = nil
    cookies.delete(:remember_token)
  end
end

Rails サーバーを実行し、localhost:3000 で表示しようとすると、次のようになります。

sample_app/app/views/layouts/_header.html.erb 行番号 9 が発生した場所:

SQLite3::SQLException: そのような列はありません: users.remember_token: SELECT "users".* FROM "users" WHERE "users"."remember_token" = 'lotsofcharacters' LIMIT 1

この行は以下を参照しています: <% if signed_in? %>

完全なエラーを読むことさえできないので、ここにリストする他のファイルが正直にわかりません。この章では変更されていないので、連絡先/概要/ホームページは問題ないと思いますが、それらもリストする必要があると誰かが考えた場合は、リストすることができます. 助けてくれてありがとう!

4

4 に答える 4

1

Mhartl のチュートリアルを学習しているときに、同じ問題に遭遇しました。データベースにすでにユーザーがいる場合、「remember_token」移行が機能しないため、この問題が発生します。最初にデータを消去してから、次のように db:migrate. を実行する必要があります。

rake db:drop 
db:create 
rake db:migrate

(注意:これによりすべてのデータが消去されます)

于 2014-05-07T16:34:51.087 に答える
1

このエラーは、DB が正しく設定されていないことを示しています。

SQLite3::SQLException: そのような列はありません: users.remember_token: SELECT "users".* FROM "users" WHERE "users"."remember_token" = 'lotsofcharacters' LIMIT 1

それは、列が欠落していることを示しています。その列の定義は、おそらく DB 移行ファイルの 1 つにあります。

bundle exec rake db:migrate(開発用) および(テスト用) を実行bundle exec rake db:migrate RAILS_ENV=testして、以前に実行されたことのない DB 移行を実行してから、もう一度やり直してください。

アップデート:

DB の移行は段階的に行う必要がありますが、アプリの移行がそのように記述されていない場合は、以下を調べることができます。

  1. 不足している列を追加する行が実際にある場合は、DB 移行スクリプトを確認してください。
  2. 欠落している列の行が実際に存在する場合は、DB スキーマ ファイルの元のコピーを確認してください。
  3. @ジェレミーの答えを見てください。
于 2013-09-27T02:06:10.400 に答える
0

あなたがすでにこれを解決したかどうかはわかりませんが、私は自分で解決しました。何らかの理由で「$ rails generate migration add_remember_token_to_users」は空のシェルのままになるため、db/migrate/[ts]_add_remember_token_to_users.rb に移動して手動で追加する必要がありました:

add_column :users, :remember_token, :string
add_index  :users, :remember_token

変更方法へ。次に実行します。

$ bundle exec rake db:migrate

$ bundle exec rake test:prepare

そして、「SQLite3::SQLException: no such column: users.remember_token: SELECT "users".* FROM "users" WHERE "users"."remember_token"...」エラーを処理する必要があります。

于 2014-01-26T05:45:36.813 に答える
0
SQLite3::SQLException: no such column: users.remember_token:

実行していないようですねrake db:migrate。次にrake db:test:prepare、(db:migrate が生成する) schema.rb を使用して実行し、テスト データベースを生成します。

詳細については、このRails ガイドを参照してください。

于 2013-09-27T02:08:47.610 に答える