【问题标题】:Rails 3: Ruby variables in view are in NilClassRails 3:视图中的 Ruby 变量在 NilClass 中
【发布时间】:2011-07-28 08:07:50
【问题描述】:

请原谅新手的问题,但我很难过。我是一名正在转换 Rails 的老师
1 个应用到 Rails 3。我的“验​​证”控制器正在从我的数据库中获取正确的值,
但是当视图尝试访问变量时,我被告知它们在“nilClass”中。
这是我的控制器:

文件ROOT/app/controllers/verify_controller.rb:

class VerifyController < ApplicationController
    @student = Assignment.get_student
    @assignments = Assignment.get_assignments
    logger.info("VERIFY: @student is #{@student}")
    logger.info("VERIFY: @assignments is #{@assignments}")
end

这是我的看法:

文件ROOT/app/views/verify/list.html.erb:

<?xml version="1.0" encoding="UTF-8" ?>
<!--
    This is our listing view.
-->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <title>Student assignments</title>
</head>
<body>

<div id="assignment-list">

  <!-- @student is a Ruby variable.  The @ means it is a "member"
       which is accessible beyond the code that calculates it.  (The
       class is the VerifyController class, which we will be seeing
       shortly.)  See below for the angle brackets!
  -->

  <h2>Assignments for <%= @student %></h2>
  <table cellspacing="5" cellpadding="5" border="2">
    <tr>
      <th>Student</th>
      <th>Description</th>
      <th>Date received</th>
    </tr>

  <!-- HTML alone doesn't know how many rows are in the table, so
       Ruby has to look at the variables and provide a loop to do
       the rows .
  -->

  <!--  < % and % > delimit Ruby code in HTML so long as the Ruby
        doesn't produce a value (there is no blank space between
        the angle brackets and the % signs; I had to put one in
        to prevent Ruby from trying to interpret this comment!)
        If the expression does produce a value, < % = and % > are the
        delimiters.
  -->
  <% logger.info("LIST: The class of @student is #{@student.class}") %>
  <% logger.info("LIST: The class of @assignments is #{@assignments.class}") %>
  <% logger.info("LIST: @student is #{@assignments}") %>
  <% logger.info("LIST: @assignments is #{@assignments}") %>
  <% for assign in @assignments %>
     <tr>
       <td><%= assign.student %></td>
       <td><%= assign.description %></td>
       <td><%= assign.whendone %></td>
     </tr>
  <% end  # end the "for" %>
  </table>
</body>
</html>

Any suggestions?

【问题讨论】:

    标签: ruby-on-rails views


    【解决方案1】:

    您正确使用了变量,但错误提示 Assignment.get_student 返回 nil 而不是学生。在 Assigment 模型中检查此方法。

    另外,不确定是否是粘贴错误,但您的控制器应如下所示:

    class VerifyController < ApplicationController
    
      def list
        @student = Assignment.get_student
        @assignments = Assignment.get_assignments
        logger.info("VERIFY: @student is #{@student}")
        logger.info("VERIFY: @assignments is #{@assignments}")
      end
    
    end
    

    【讨论】:

    • 谢谢。我确实检查并正确返回了值。
    • 啊!我觉得自己像个白痴。当然,“def list”应该在那里!这解决了它!非常感谢
    猜你喜欢
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    • 2012-12-28
    • 2021-07-23
    相关资源
    最近更新 更多