2015-04-21 3 views
0

Я новичок в рельсах, и я застрял в главе 9.2.2 «Требование к правильному пользователю», когда я добавляю второго пользователя-лучника в файл users.yml и добавить другой код в user_controller_test.rb и users_controller.rb, тест Exec грабли пробеге расслоением, я получаю 30 ошибок о том, что:Rails Учебник Michael Hartl глава 9.2.2 ошибки

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', '[email protected]', '$2a$04$kDHpg7Zah2wc3X.YbWs5E.pytz8byEkUYo6O7uyPCftblGq3BEogW', '--- 
     name: Sterling Archer 
     email: [email protected] 
     password_digest: 

users.yml код

michael: 
    name: Michael Example 
    email: [email protected] 
    password_digest: <%= User.digest('password') %> 


    archer: 
    name: Sterling Archer 
    email: [email protected] 
    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

Проблема заключается в том, что вы случайно отступ определения :archer в users.yml.

+0

lol, гораздо проще найти с форматированием сообщений :-) +1 –

+0

Да, хотя я не знал, что YAML был незаметным для меня, так что часто бывает хорошим опытом обучения. Я был наполовину включён в апелляцию еще одного rspec/capybara/factorygirl (вниз с непрозрачными светильниками!), Но, если возможно, обучение должно быть укусом. Спасибо за поддержку! –

+0

OMG, я буквально потратил часы на часах на прошлой неделе, пытаясь выяснить, в чем были проблемы, и это был отпечаток: archer def, lol. теперь я, что искать, не думал искать отступы, спасибо много парней, действительно ценю ваше время. – bakerboi

Смежные вопросы