我试图关注迈克尔·哈特尔的Ruby on Rails教程,而我目前仍然坚持第11章。我不知道如何解决这些错误:
1) Error:
UsersIndexTest#test_index_as_admin_including_pagination_and_delete_links:
NoMethodError: undefined method `microposts' for nil:NilClass
app/controllers/users_controller.rb:14:in `index'
test/integration/users_index_test.rb:12:in `block in <class:UsersIndexTest>'
2) Error:
UsersIndexTest#test_index_as_non-admin:
NoMethodError: undefined method `microposts' for nil:NilClass
app/controllers/users_controller.rb:14:in `index'
test/integration/users_index_test.rb:29:in `block in <class:UsersIndexTest>'
中的问题代码
app/controllers/users_controller.rb
是第14行,或@microposts = @user.microposts.paginate(page: params[:page])
。我添加它后,测试开始失败。
def index
@users = User.paginate(page: params[:page])
@microposts = @user.microposts.paginate(page: params[:page])
end
我认为协会存在问题,但我有
class Micropost < ActiveRecord::Base
belongs_to :user
.
.
.
end
和
class User < ActiveRecord::Base
has_many :microposts
.
.
.
end
我的一些测试也适用于@ user.micropost
class MicropostTest < ActiveSupport::TestCase
def setup
@user = users(:michael)
@micropost = @user.microposts.build(content: "Lorem ipsum")
end
test "should be valid" do
assert @micropost.valid?
end
所以我不知道出了什么问题。如果有人能提供帮助那就太棒了。
答案 0 :(得分:1)
我认为你希望@microposts能够参加节目动作。
答案 1 :(得分:0)
您的索引方法会分配@users
实例变量。然后,您尝试在尚未分配的microposts
(注意不是复数)变量上调用@user
。在ruby中,尚未赋值的任何实例变量都是nil
。
我不清楚你要完成什么,但你只能在单个microposts
对象的实例上调用User
,而不是像你已分配的那样集合到@users
。