在我的控制器中,我将两个不同实例变量的结果合并为一个实例变量,并出现以下错误:
undefined method `<<' for nil:NilClass
这是我的控制器代码
@conversational = InterestType.where("institution_id = ? or global = ? and category_id = ?", current_user.profile.institution_id, true, 1).first
@commercial = InterestType.where("institution_id = ? or global = ? and category_id = ?", current_user.profile.institution_id, true, 2).limit(17)
@user_interest_types << @conversational
@user_interest_types << @commercial
我如何克服这个错误或获得以下结果的好方法。
答案 0 :(得分:4)
如果你想要附加到数组,你有两个选择,在这里你必须注意你要添加的内容:
# Define an empty array
@user_interest_types = [ ]
# Add a single element to an array
@user_interest_types << @conversational
# Append an array to an array
@user_interest_types += @commercial
如果对两个操作都使用<<
,则最终将数组推入数组,结果结构有多个层。如果您在结果上调用inspect
,则可以看到此内容。
答案 1 :(得分:0)
如果你想要一个嵌套数组:
@user_interest_types = [@conversational, @commercial]
# gives [it1, [it2, it3, it4]]
或者如果你喜欢扁平阵列:
@user_interest_types = [@conversational, *@commercial]
# gives [it1, it2, it3, it4]
假设@conversational = it1
和@commercial = [it2, it3, it4]