2016-03-07 84 views
-3

因此,这里的设置:使用添加到一个表时,得到一个零误差“<<”视图

控制器传递这两个到视图:

@courses = Course.all 
@assignments = Assignment.all 
<% this_assignment = Assignment.create(instructor: "test") %> 
<% @assignments << this_assignment %> 

Assignment模型具有(除其他之外)属性instructor,这是一个字符串值。

我得到以下错误:

undefined method `<<' for nil:NilClass 

什么奇怪的是我做同样的事情当然在前面的代码,它似乎很好地工作。我相信这是一些简单的修复,但我似乎无法弄清楚为什么<<适用于@courses,但不适用于@assignments

+0

@assignments为零。 *赋值*有一个*全部*方法吗? – Mircea

+0

是的。该控制器写为:@assignments = Assignment.all – gllwrnce

回答

1

这是不必要的事:

<% @assignments << this_assignment %> 

@assignments将包括所有记录每个页面加载时间。如果页面正在刷新,则变量将具有其中的所有分配。

你也不应该在视图中创建动作。每次加载页面时都会创建一条记录。

删除试图推送到@assignments,你应该没问题。刷新,它会在那里。

+0

那么这主要是一个例子。页面本身需要创建新的分配,并通过运行某些约束将它们添加到@assignments中。我只是在做一个测试,看看我是否会在设置过程中遇到任何问题。如果我没有解释得那么好,请让我知道,但这样做是视图目的的一部分。 – gllwrnce

+0

你仍然不应该在视图中做对象创建......这是一个很大的代码嗅觉,这意味着你可能应该改变事情的方式,因此它们不会在视图中完成。我们可以帮助你,如果你写下你在代码中尝试过的东西,为什么你认为你必须这样做,以及你想要实现什么...作为一个新问题。 –

+0

只是堆在... Taryn东和toddmetheny是正确的雨。视图中没有创建对象。坏。很坏。它使我的眼睛受伤。 – jvillian

1

如果您收到此错误消息,则@assignments为零。 尝试并打印出来或使用byebug进行验证。

这些原因浮现在脑海中:

  • 错字控制器
  • 控制器动作不叫
  • 有更多的代码,我们没有看到
相关问题