Rails教程Michael Hartl第9.2.2章错误

时间:2015-04-21 02:32:52

标签: ruby-on-rails

我刚刚开始使用rails并且我已经陷入了第9.2.2章和第34章;要求合适的用户",当我将第二个用户弓箭手添加到users.yml文件并添加时user_controller_test.rb的另一个代码和users_controller.rb,运行包exec rake测试,我得到30个错误,说明:

ERROR["test_layout_links", SiteLayoutTest, 0.019046]
 test_layout_links#SiteLayoutTest (0.02s)
ActiveRecord::StatementInvalid:         ActiveRecord::StatementInvalid: SQLite3::SQLException: table users has no column named archer: INSERT INTO "users" ("name", "email", "password_digest", "archer", "created_at", "updated_at", "id") VALUES ('Michael Example', 'michael@example.com', '$2a$04$kDHpg7Zah2wc3X.YbWs5E.pytz8byEkUYo6O7uyPCftblGq3BEogW', '---
        name: Sterling Archer
        email: duchess@example.gov
        password_digest:

users.yml code

michael:
  name: Michael Example
  email: michael@example.com
  password_digest: <%= User.digest('password') %>


  archer:
    name: Sterling Archer
    email: duchess@example.gov
    password_digest: <%= User.digest('password') %>

users_controller_test.rb代码

require 'test_helper'

class UsersControllerTest < ActionController::TestCase

  def setup
    @user       = users(:michael)
    @other_user = users(:archer)
  end  

  test "should get new" do
    get :new
    assert_response :success
  end

  test "should redirect edit when not logged in" do
    get :edit, id: @user
    assert_not flash.empty?
    assert_redirected_to login_url
  end

  test "should redirect update when not logged in" do
    patch :update, id: @user, user: { name: @user.name, email: @user.email }
    assert_not flash.empty?
    assert_redirected_to login_url
  end

  test "should redirect edit when logged in as wrong user" do
    log_in_as(@other_user)
    get :edit, id: @user
    assert flash.empty?
    assert_redirected_to root_url
  end

  test "should redirect update when logged in as wrong user" do
    log_in_as(@other_user)
    patch :update, id: @user, user: { name: @user.name, email: @user.email }
    assert flash.empty?
    assert_redirected_to root_url
  end
end

user_controller.rb代码

class UsersController < ApplicationController


  before_action :logged_in_user, only: [:edit, :update]
  before_action :correct_user,   only: [:edit, :update]

  def show
      @user = User.find(params[:id])
    end

  def new
    @user = User.new
  end

  def create
      @user = User.new(user_params)
      if @user.save
        log_in @user
        flash[:success] = "Welcome to the Sample Application of the Great Bakerboi!"
        redirect_to @user
      else
        render 'new'
      end
    end

    def edit
      @user = User.find(params[:id])
    end

    def update
        @user = User.find(params[:id])
        if @user.update_attributes(user_params)
          flash[:success] = "Profile updated"
          redirect_to @user
        else
          render 'edit'
        end
      end

    private

    def user_params
      params.require(:user).permit(:name, :email, :password, :password_confirmation)
    end


# Before filters

# Confirms a logged-in user.
def logged_in_user
      unless logged_in?
        flash[:danger] = "Please log in."
        redirect_to login_url
end  
end

确认用户正确。

def correct_user
  @user = User.find(params[:id])
  redirect_to(root_url) unless @user == current_user
end

1 个答案:

答案 0 :(得分:1)

问题是您无意中缩进了:archerusers.yml的定义。