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
конца
lol, гораздо проще найти с форматированием сообщений :-) +1 –
Да, хотя я не знал, что YAML был незаметным для меня, так что часто бывает хорошим опытом обучения. Я был наполовину включён в апелляцию еще одного rspec/capybara/factorygirl (вниз с непрозрачными светильниками!), Но, если возможно, обучение должно быть укусом. Спасибо за поддержку! –
OMG, я буквально потратил часы на часах на прошлой неделе, пытаясь выяснить, в чем были проблемы, и это был отпечаток: archer def, lol. теперь я, что искать, не думал искать отступы, спасибо много парней, действительно ценю ваше время. – bakerboi