从不同的控制器NilClass错误渲染视图

时间:2015-07-28 14:18:02

标签: ruby-on-rails rendering

我正在尝试在不同的控制器视图中呈现视图,但我得到了:

undefined method `each' for nil:NilClass

我将'views / users / show'中的视图呈现为:

<%= render :template => 'groups/index' %>

视图本身位于'views / groups / index'下:

<% @groups.each do |group| %>
  <li>
    <%= group.name %>
    <%= group.description %>
  </li>
<% end %>

我的group控制器索引如下:

def index
  @groups = Group.all
end

我认为这是我渲染视图的问题,因为如果我在索引控制器中创建一个实例变量并在视图中调用它就不会出现。我的数据库中的Group表中有条目。

任何帮助都将不胜感激。

提前致谢。

2 个答案:

答案 0 :(得分:1)

我认为用template:参数替换partial:就足够了。

试试这个:

<%= render partial: 'groups/index' %>

您必须使用groups/index.html.erb

重命名/复制groups/_index.html.erb

这仅适用于呈现视图,但不会实现GroupsController的功能。

修改

您必须重新定义UsersController

中的群组
# UsersController
def index
  @groups = Group.all
end

根据您需要向用户展示所有这些组的次数,这可能会变得难以维护。如果您经常使用它,请考虑添加

# i.e. ApplicationController
def groups
  Group.all
end

在ApplicationController中(或者您希望包含在不同控制器中的某个模块)。然后你可以打电话

# UsersController
def index
  @groups = groups
end

仍然是<%= render partial: 'groups/index' %>

答案 1 :(得分:1)

变化:

<%= render :template => 'groups/index' %>

要:

<%= render 'groups/index' %>

并确保索引操作的文件名为_index.html.erb而不是index.html.erb

修改

渲染视图时,您只渲染模板,这会调用索引操作的请求。您必须在初始视图的操作中定义@groups