2012-03-08 45 views
0

我試圖做一個軌道應用程序,測試我提供的一個主機名的一些端口。這是我到目前爲止有:如何在rails中顯示這些信息?

的routes.rb:

Diagnostics::Application.routes.draw do 
    match 'port_testing/test', :controller => :port_testing, :action=> :test 
end 

index.html.haml:

= stylesheet_link_tag 'user' 

.spacey 
    %h1 Port Testing 
    = form_tag('port_testing/test', method: 'get') do 
    = text_field_tag :hostname, 'localhost', size: 50 
    - @models.each do |key,value| 
     %input{:type=>"checkbox", :name=>"#{key}", :value=>1, :checked=>value} 
     =key 

    %input{:type => :submit, :value => "Test"} 

port_testing_controller.rb:

require 'socket' 

class PortTestingController < ApplicationController 
    def index 
     @models = {"80" => false, "443" => false, "2195" => true, "28009" => false} 
    end 
    def test 
     puts "\n" 

     hostname = params["hostname"] 
     puts hostname 

     ports = ["80", "443", "2195", "28009"] 
     ports.each do |key| 
      #puts key 
      if params.has_key?(key) 
       port = key.to_i 
       is_port_open?(hostname, port) 
      end 
     end 

     redirect_to("#/port_testing") 
    end 

    def is_port_open?(ip, port) 
     begin 
      Timeout::timeout(1) do 
       begin 
        s = TCPSocket.new(ip, port) 
        puts "Successful" 
        s.close 
        return true 
       rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH 
        puts "Error" 
        return false 
       end 
     end 
     rescue Timeout::Error 
      puts "Timeout" 
     end 

     return false 
    end 
end 

眼下,我有什麼作品。我可以在文本字段中輸入主機名,檢查我想要測試的端口,並將結果打印到屏幕上。

但是,我想要做的是能夠保存我輸入的最新參數。現在,單擊測試後,頁面將重新加載,以便重置爲默認主機名和默認端口。我希望它保持與以前一樣的主機名和端口。我將如何做到這一點?

此外,我希望將結果放在表格中並顯示在同一網頁上。我會如何去做這件事?

回答

0

控制器不應該打印到屏幕上。要輸出信息,您需要創建一個視圖文件。對於測試控制器操作,視圖文件應該是app/views/port_testing/test.html.haml。把你的桌子放在那裏。你必須在你的控制器中創建一些實例變量,這些變量可以在你的視圖中使用。

爲了用主機和端口替換表單,我建議在控制器操作中將參數保存到會話中。然後使用會話變量來設置HTML輸入的值。

+0

我真的不明白「保存會話參數」的含義。你能解釋一下嗎?或者鏈接到一些例子?謝謝。 – 2012-03-09 14:27:42

+0

會話應該在您的控制器中可用。這是一個散列,因此您可以像讀取其他散列一樣讀寫數據。在你的控制器動作中,你可以像這樣'session [:hostname] = params [:hostname]''保存主機名。你可以通過訪問'session [:hostname]'來取回。會話通過頁面刷新存在,所以當您渲染視圖時,您可以從會話中提取以前使用的值並填充輸入。 – JohnColvin 2012-03-09 14:40:54

相關問題