Rails - 在循环中渲染Ajax

时间:2018-06-03 16:59:43

标签: ruby foreach ruby-on-rails-5

我想用ajax在我的视图中更新几个单个表格单元格。 是否有机会在循环期间多次运行正常运行时间? 目前循环遍历所有给定记录,但部分运行一次。

def CheckUptimes
  require 'net/ssh'
  @username = "updater"
  @password = "üqwlp+ß$2"
  @cmd = "uptime"
  @items = Item.all.where("(category = 'Ubuntu 14 LTS')")
  @items.each do |ci|
    @hostname = ci.name
    begin
      ssh = Net::SSH.start(@hostname, @username, :password => @password)
      @uptime = ssh.exec!(@cmd)
      ssh.close
      @uptime = @uptime.strip
      ci.update_attributes(:uptime => @uptime)
      respond_to do |format|
        format.html
        format.js { render :partial => "uptime", :locals => { :id => ci.id, :uptime => @uptime } }
      end
    rescue
      puts "Unable to connect to #{@hostname} using #{@username}/#{@password}"
    end
  end
end

1 个答案:

答案 0 :(得分:1)

如果我理解得很好,我认为你可以保存两个实例变量(Arrays),哪些主机名能够连接,哪些不能连接,然后在checkuptimes.js.erb中你可以显示哪些变量可以用{{3} }}

像这样的东西

@con_ok=@con_ko=[]
@items.each do |ci|
@hostname = ci.name
begin
  ssh = Net::SSH.start(@hostname, @username, :password => @password)
  @uptime = ssh.exec!(@cmd)
  ssh.close
  @uptime = @uptime.strip
  ci.update_attributes(:uptime => @uptime)
  con_ok<<ci.id
rescue
   con_ko<< ci.id
end
respond_to do |format|   ## Not necessary ##
   format.html
   format.js
end
checkuptimes.js.erb

中的

$("#mydiv").html("<%= escape_javascript(render 'uptime', collection: @con_ok)%>");

在这个例子中,部分uptime将被呈现为项目包含@con_ok的次数,其中局部变量con_ok包含数组中的项目(id)