使用mysql查询数据更新“数字”小部件 - Dashing

时间:2017-05-16 14:25:29

标签: mysql ruby rubygems

我对ruby非常新,我正在尝试设置测试仪表板。我看到mysql给出了sql查询的总数。然而它没有填充在小部件上。有人可以帮忙吗?

# mysql.rb (jobs file)    
require "mysql2"

SCHEDULER.every '5s' do
  client = Mysql2::Client.new(:host => "192.168.1.3",:username => "testuser",:database => 'testdb')

  results=client.query("SELECT count(*) as total from testdb.share")
  puts results

  results.each do |row|
    puts row['total']
    send_event('totals', { value: total })
  end
end

仪表板文件:

# sample.erb
<li data-row="1" data-col="1" data-sizex="1" data-sizey="1">
  <div data-id="totals" data-view="Number" data-title="Number of Shares" data-moreinfo="Shares" data-prefix="$"></div>
</li>
....

Dashing控制台显示如下

#<Mysql2::Result:0x007f98b4b85d18> 
3   --->>>> This is the count of my mysql query

调度程序被捕异常:

> undefined local variable or method `total' for main:Object
> /home/user/.rvm/sweet_dashboard_project/jobs/mysql.rb:20:in `block (2
> levels) in <top (required)>'
> /home/user/.rvm/sweet_dashboard_project/jobs/mysql.rb:11:in `each'
> /home/user/.rvm/sweet_dashboard_project/jobs/mysql.rb:11:in `block in
> <top (required)>'
> /home/user/.rvm/gems/ruby-2.2.1/gems/rufus-scheduler-2.0.24/lib/rufus/sc/jobs.rb:230:in
> `call'
> /home/user/.rvm/gems/ruby-2.2.1/gems/rufus-scheduler-2.0.24/lib/rufus/sc/jobs.rb:230:in
> `trigger_block'
> /home/user/.rvm/gems/ruby-2.2.1/gems/rufus-scheduler-2.0.24/lib/rufus/sc/jobs.rb:204:in
> `block in trigger'
> /home/user/.rvm/gems/ruby-2.2.1/gems/rufus-scheduler-2.0.24/lib/rufus/sc/scheduler.rb:430:in
> `call'
> /home/user/.rvm/gems/ruby-2.2.1/gems/rufus-scheduler-2.0.24/lib/rufus/sc/scheduler.rb:430:in
> `block in trigger_job'

1 个答案:

答案 0 :(得分:0)

问题在于:

results.each do |row|
  puts row['total']
  send_event('totals', { value: total })
end

检查第send_event('totals', { value: total })行。您将value设置为total,但您尚未在任何地方设置该变量或方法(即total),因此undefined local variable or method错误。

它认为您想要分配row['total']

results.each do |row|
  puts row['total']
  send_event('totals', { value: row['total'] })
end

<强>更新

要显示窗口小部件中的值,您必须使用current而不是value来获取正确的绑定(在send_event()中),因此上面的代码变为:

results.each do |row|
  puts row['total']
  send_event('totals', { current: row['total'] })
end

另一种方法是在源文件current中将value更改为widgets/number/number.html

所以这一行:

<h2 class="value" data-bind="current | shortenedNumber | prepend prefix | append suffix"></h2>

会变成:

<h2 class="value" data-bind="value | shortenedNumber | prepend prefix | append suffix"></h2>

虽然我不推荐这样做,但最好保留默认值(即current)。