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

时间:2015-05-11 03:36:11

标签: ruby-on-rails ruby-on-rails-4.2

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

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

我的静态控制器

def home
  render "appointments/index"
end

我的约会控制员

def index
   @appointments = Appointment.all
end

我得到以下错误“未定义的方法`每个'为nil:NilClass” 我理解这是因为@appointments为零,但我如何解决这个问题,以便@appointments不会保持为零。

感谢您输入。

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

渲染 - 只需渲染您指定的模板。如果要从另一个控制器操作渲染模板,则必须提供该模板所期望的实例变量。在这种情况下,变量是@appointments。在渲染模板之前将数据提取到此变量中。

希望我回答你的问题。