【问题标题】:Updating "Number" widgets with mysql query data - Dashing使用 mysql 查询数据更新“数字”小部件 - Dashing
【发布时间】:2017-05-16 14:25:28
【问题描述】:

我对 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'

【问题讨论】:

    标签: mysql ruby rubygems


    【解决方案1】:

    问题出在这里:

    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
    

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

    所以这一行:

    <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)。

    【讨论】:

    • 谢谢格里。您的代码修改有所帮助,但小部件仍未更新。 ..................... 结果。每个都做 |row| puts row['total'] send_event('totals', { value: row['total'] }) end Job 将计数(变量总计)值显示为 "3" 。不知何故,这个值没有被发送到小部件“totals”
    • 。请指教。
  • @Mike 知道了,你必须使用current绑定而不是value,所以将send_event('totals', { value: row['total'] })改为send_event('totals', { current: row['total'] });检查更新的答案。
  • 非常感谢格里。它工作得很好。如果有任何文档可以理解此工作流程,您能否告诉我?
  • @Mike 转到sweet_dashboard_project/widgets,您将找到一个目录,其中包含每个data-view 的源文件。打开包含小部件源 html 的 .html 文件并查找任何 data-bind 值,这些是您可以在 send_event() 中使用的值。您也可以更改该文件以自定义您的小部件。
  • @Mike 你可以查看他们的homepage,我知道,这是基本的;但在浏览widget 目录时使用该信息,您将更好地了解此 gem 的工作原理。
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签