我对一个实例变量有一个非常奇怪的情况。我在控制器中,我有这个动作
def index
@categories = Category.main_categories
end
在视图中我有这个
<% @categories.each do |category| %>
...
<% end %>
并且像魅力一样工作
当我将变量名称从@categories
更改为@main_categories
时(在控制器和视图中)我收到此错误
ActionView::Template::Error:
undefined method 'each' for nil:NilClass
我尝试了同样的(更改实例变量的名称)与其他控制器和视图,它的工作原理。
这只发生在测试环境中, 在开发环境中它可以工作
我的测试文件:
require "rails_helper"
RSpec.feature "Dashboard categories", :type => :feature do
let!(:menu_1) { create(:category) }
let!(:menu_2) { create(:dso) }
let!(:menu_3) { create(:stargazing) }
let!(:sub_menu_1_a) { create(:planets) }
let!(:sub_menu_1_b) { create(:asteroid) }
let!(:sub_sub_menu_1_a) { create(:mars) }
let!(:user) { create(:user) }
context "when visited by a not authorized user, " do
scenario "it should contains a message to sign in" do
visit "/dashboard/categories"
expect(page).to have_text(/You need to sign in or sign up before continuing/)
end
end
context "when visited by an authorized user," do
before do
sign_in user
visit "/dashboard/categories"
end
scenario "it should contains all main and sub categories" do
expect(page).to have_css('tr', count: 6)
expect(page).to have_css('tr.subcategory', count: 3)
end
end
end
知道我做错了什么吗?