mysql - NameError - 未定义的局部变量 - 将数组从 ruby​​ 文件解析为 haml 文件

标签 mysql ruby ajax sinatra haml

我们使用 Mysql 数据库并使用 haml 文件。

我们现在遇到的问题是,当我们使用 mysql 数据库中的数据动态创建表时,它会给出以下错误:

NameError - undefined local variable or method `allsites' for #<Sinatra::Application:0x00
00000128c980>:
    /home/usr/testsinatra/views/sites.haml:16:in `block in singleton class'
    /home/usr/testsinatra/views/sites.haml:-8:in `instance_eval'
    /home/usr/testsinatra/views/sites.haml:-8:in `singleton class'
    /home/usr/testsinatra/views/sites.haml:-10:in `__tilt_12132720'    

奇怪的是,表实际上被创建了!

这是 ruby​​ 文件的一部分,我们用 mysql 数据填充数组。

get '/getsites' do

allsites = con2.query("SELECT * FROM tblSites", :as => :array)



haml :sitesOverzicht, :locals => {:allsites => allsites}
end

这是我们动态制作表格的部分:

%table{:border => "1px"}
  %tbody
    %h1 All Sites
    -allsites.each do |id,name|
      %tr
        %td
          = id
        %td 
          = name

另一个奇怪的部分是当页面加载时,我们没有收到任何错误,并且在页面加载时创建表。 但是,当我们从另一个数组在另一个表中创建一个新的表行并使用 Ajax 存储此数据时,即使我们不执行任何操作,也会收到此变量的此错误。

最佳答案

我已经设法解决我自己的问题!

要使用局部变量,我们必须在查询中使用“@”符号,如下所示:

@allSites = con2.query("SELECT * FROM tblSites", :as => :array)

之后我们也在链接中更改了它以将其发送到 haml 文件:

haml :sitesOverzicht,:locals => {:allSites => @allSites}

后来在我们的 haml 文件中,我们得到了 NoMethodException,但我们发现我们必须利用 to_a.each 函数才能使用 "each"我们已经有这样的功能:

 -@allSites.to_a.each do |id,name|

  %tr
    %td
      = id
    %td 
      = name

通过 to_a.each 函数,您将使用数组作为参数。因此,each 函数将循环遍历数组。如果您使用each函数而不说您正在使用数组,它将给出nill异常。

关于mysql - NameError - 未定义的局部变量 - 将数组从 ruby​​ 文件解析为 haml 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26638295/

相关文章:

ruby - 像 Ruby 的 Psyco 库 (Python) 这样的东西存在吗?

ruby - 升级到 OSX 10.7.3 Lion 后修复 Postgresql

php - JQuery中发现PHP返回AJAX错误

jquery - 从 jQuery 调用 ASP.NET 4.0 WCF 服务会产生 400 Bad Request

mysql - 如何从帮助程序方法动态返回Diesel相等表达式?

java - 提交前的 SQL 外键

ruby - 用映射替换数组元素

ASP.NET AJAX 验证控件

mysql - sql select语句,正确select语句指南

php - MySQL Blob 未正确显示