我们使用 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/