问题描述
我对 ruby on rails 非常陌生,很可能遗漏了一些简单的东西.
I'm incredibly new to ruby on rails, and very likely missing something easy.
我一直在关注 Michael Hartl 的教程书.昨晚我停下来时一切都很好,但今天早上我把头撞到墙上试图找出这个错误.
I've been following through Michael Hartl's tutorial book. Everything was fine last night when I stopped, but this morning I am hitting my head on a wall trying to figure out this error.
我在第 8 章:测试清单 8.25.
I'm on Chapter 8: the test is listing 8.25.
我想我可能刚刚打错了字,所以我回到了今天早上开始的地方,直接从教程中复制了代码.尽管如此,当我运行测试时,我得到
I thought I may have just made a typo, so I went back to where I started this morning and just copied the code straight from the tutorial. Still, when I run the test I get
1) Error:
StaticPagesControllerTest#test_should_get_about:
ActiveRecord::Fixture::FormatError: ActiveRecord::Fixture::FormatError
Error:
StaticPagesControllerTest#test_should_get_about:
NoMethodError: undefined method `each' for nil:NilClass
这在以前从来都不是问题,所以这就是为什么我的头撞在墙上的原因.
That was never a problem before, so that's why I'm hitting my head on the wall.
在这些错误之后,我得到了
After those errors, I'm getting
10) Error:
UserTest#test_name_should_not_be_too_long:
ActiveRecord::Fixture::FormatError: ActiveRecord::Fixture::FormatError
静态页面控制器测试
require 'test_helper'
class StaticPagesControllerTest < ActionController::TestCase
def setup
@base_title = "Ruby on Rails Tutorial Sample App"
end
test "should get home" do
get :home
assert_response :success
assert_select "title", "Ruby on Rails Tutorial Sample App"
end
test "should get help" do
get :help
assert_response :success
assert_select "title", "Help | #{@base_title}"
end
test "should get about" do
get :about
assert_response :success
assert_select "title", "About | #{@base_title}"
end
test "should get contact" do
get :contact
assert_response :success
assert_select "title", "Contact | Ruby on Rails Tutorial Sample App"
end
end
测试助手
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
class ActiveSupport::TestCase
# Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
fixtures :all
# Add more helper methods to be used by all tests here...
# Returns true if a test user is logged in.
def is_logged_in?
!session[:user_id].nil?
end
end
这是固定装置
michael:
name: Michael Example
email: michael@example.com
password_digest: <%= User.digest('password') %>
会话控制器
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
# Log the user in and redirect to the user's show page.
log_in user
redirect_to user
else
# Create an error message.
flash.now[:danger] = 'invalid email/password combination' # not
quite right
render 'new'
end
end
def destroy
end
end
会话助手
module SessionsHelper
# Logs in the given user.
def log_in(user)
session[:user_id] = user.id
end
# Returns the current logged in user (if any)
def current_user
@current_user ||= User.find_by(id: session[:user_id])
end
# Returns true if the user is logged in, false otherwise
def logged_in?
!current_user.nil?
end
end
用户模型
class User < ActiveRecord::Base
before_save { self.email = email.downcase }
validates :name, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, length: { maximum: 255 },
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
has_secure_password
validates :password, presence: true, length: { minimum: 6 }
# Returns the hash digest of the given string.
def User.digest(string)
cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST :
BCrypt::Engine.cost
BCrypt::Password.create(string, cost: cost)
end
end
用户控制器
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
end
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
# handle a successful save
log_in @user
flash[:success] = "Welcome to the Sample App!"
redirect_to @user
else
render 'new'
end
end
private
def user_params
params.require(:user).permit(:name, :email, :password,
:password_confirmation)
end
end
任何帮助将非常感激!如果还有什么我需要发布的,请告诉我.
Any help would be GREATLY appreciated!Let me know if there's anything else I need to post.
推荐答案
使用缩进(fixture):
Use it indented (fixture):
michael:
name: Michael Example
email: michael@example.com
password_digest: <%= User.digest('password') %>
这篇关于Rails 教程:NoMethodError:nil:NilClass 的未定义方法 `each'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!