![](/img/trans.png)
[英]Rails 4: NoMethodError: undefined method `each' for nil:NilClass
[英]Rails Tutorial: NoMethodError: undefined method `each' for nil:NilClass
我是紅寶石的新手,很容易錯過一些容易的事情。
我一直在關注Michael Hartl的教程。 昨晚我停下來時一切都很好,但今天早上我正撞在牆上試圖找出此錯誤。
我在第8章:測試列出了8.25。
我以為我可能剛剛打過錯,所以我回到了今天早上開始的地方,只是直接從教程中復制了代碼。 不過,當我運行測試時,我得到
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
以前從來都不是問題,所以這就是為什么我要撞牆了。
這些錯誤之后,我得到
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
任何幫助將不勝感激! 讓我知道是否還有其他需要發布的信息。
使用它縮進(夾具):
michael:
name: Michael Example
email: michael@example.com
password_digest: <%= User.digest('password') %>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.