调用另一个控制器索引时 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。在呈现模板之前将数据提取到此变量中。
希望我回答了你的问题。
我是 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。在呈现模板之前将数据提取到此变量中。
希望我回答了你的问题。