【问题标题】:Rendering view from different controller NilClass Error来自不同控制器 NilClass 错误的渲染视图
【发布时间】:2015-10-19 04:04:06
【问题描述】:

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

undefined method `each' for nil:NilClass

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

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

视图本身位于“视图/组/索引”下:

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

我的索引组控制器如下所示:

def index
  @groups = Group.all
end

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

任何帮助将不胜感激。

提前致谢。

【问题讨论】:

    标签: ruby-on-rails rendering


    【解决方案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
    

    还是&lt;%= render partial: 'groups/index' %&gt;

    【讨论】:

    • 如果我做出改变,我会得到一个不同的错误:Missing partial groups/_index
    • 可能是因为您缺少groups/_index.html.erb。您需要这样做,因为如果您在文件前加上 _ 下划线,Rails 只会提取部分内容。
    • 如果我将它切换到部分,我会得到原始错误。它似乎识别出视图,但实际上并未渲染它。
    • 抱歉,我有点忽略了这个问题。 render 只会渲染对应的视图,但不能接管你控制器的逻辑。我会更新我的答案。
    • 我已经进行了所有这些更改,但仍然遇到同样的错误。无论我尝试什么,我都无法在索引视图中从 GroupsController 呈现任何内容。这很奇怪,因为我在 UserController 和 users/index 视图中显示所有用户时几乎完全相同。
    【解决方案2】:

    变化:

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

    收件人:

    <%= render 'groups/index' %>
    

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

    编辑

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

    【讨论】:

    • 如果我进行此更改,我仍然会收到相同的错误。谢谢。
    猜你喜欢
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    相关资源
    最近更新 更多