调用另一个控制器索引时 nil:NilClass 的未定义方法“each”

undefined method `each' for nil:NilClass while calling another controller index

我是 Rails 的新手,所以如果有人回答这个问题,请原谅,我可能没有理解这个问题的答案。

我正在尝试在我的主页上呈现约会列表,当我转到 /appointments 时,我可以正确地显示该列表,但当我尝试在另一个控制器中呈现索引操作时却不能。

我的静态控制器

def home
  render "appointments/index"
end

我的约会控制器

def index
   @appointments = Appointment.all
end

我收到以下错误 "undefined method `each' for nil:NilClass" 我知道这是因为 @appointments 为 nil,但是我该如何解决这个问题,以便 @appointments 不会保持为 nil。

感谢您的输入。

您告诉 home 操作只是为了在 appointments 目录中呈现 index 视图,但您没有提供 index 所需的 @appointments ] 查看。

render "appointments/index"

不会在您的控制器中调用 index 操作。 您可以使用 @appointments = Appointment.all 在您的主页操作中,以便它可以在您的 index 视图中使用

def home
  @appointments = Appointment.all
  render "appointments/index"
end

或者在您调用 home 操作时直接重定向到索引

def home
  redirect_to {controller: "appointments", action: "index"}
end

这是因为您的约会table在数据库中没有任何数据。您可以通过在该模型中插入数据来修复它,或者您可以使用 .present?

创建条件来检查数据是否存在
def index
    if @appointments = Appointment.all.present?
        render "appointments/index"
    else
        #render no result page
    end
end

呈现 - 只需呈现您指定的模板。如果你想从另一个控制器动作中渲染一个模板,你必须提供该模板所期望的实例变量。在你的例子中,变量是@appointments。在呈现模板之前将数据提取到此变量中。

希望我回答了你的问题。