【问题标题】:Array displays values in rails console . But return undefined method `[]' for nil:NilClass in log数组在 rails 控制台中显示值。但是在日志中为 nil:NilClass 返回未定义的方法 `[]'
【发布时间】:2020-09-14 17:30:06
【问题描述】:

我有一个返回数组的辅助方法

def site
  return Website::SITE.collect!{ |arr| arr if arr[1] != 'site_builder' }
end

Website::SITE 在控制台中返回数组

我在视图中调用这个方法。

- site.each do |menu|
    tr
      td= menu[0]

这里给出 ActionView::Template::Error (nil:NilClass 的未定义方法 `[]'):

【问题讨论】:

  • 您能否发布Website::SITE 的输出或您如何定义Website::SITE 变量?我猜这是一个一维数组,所以当您尝试通过arr[1] 访问时,它会出错。
  • [[“关于”、“关于”]、[“日历”、“日历”]、[“画廊”、“画廊”]、[“信息”、“信息”]、[ "管理", "管理"], nil, ["模板", "网站"]]

标签: ruby-on-rails


【解决方案1】:

让我们像这样重新定义函数:

def site
   Website::SITE.compact.select{ |arr| arr if arr[1] != 'site_builder' }
end

这是因为,数组Website::SITE 包含nil 值。

[["About ", "about"], ["Calendar", "calendar"], ["Gallery", "gallery"], ["Information", "information"], ["Manage ", "manage"], nil, ["Template", "website"]]

【讨论】:

    【解决方案2】:

    如果你没有把方法放在 helpers 文件夹中,而是直接放在控制器中,那么你必须在你的方法之后添加一行代码才能让它工作。

    def site
      return Website::SITE.collect!{ |arr| arr if arr[1] != 'site_builder' }
    end
    helper_method :site
    

    这应该可以修复错误

    【讨论】:

    • Helper 方法写在 helpers 文件夹中。
    猜你喜欢
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    相关资源
    最近更新 更多