我正在尝试在不同的控制器视图中呈现视图,但我得到了:
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表中有条目。
任何帮助都将不胜感激。
提前致谢。
答案 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
。