57 votes

Ruby on rails - Méthode statique

Je veux exécuter une méthode toutes les 5 minutes, je l'ai implémentée à chaque fois pour ruby (cron). Mais cela ne fonctionne pas, je pense que ma méthode n'est pas accessible. La méthode que je veux exécuter est placée dans un modèle. Je devrais penser que je dois rendre cette méthode statique afin que je puisse y accéder avec "Mymodel.MyMethod". Mais je ne peux pas trouver la bonne syntaxe ou peut-être que je cherche au mauvais endroit.

Schedule.rb

 every 5.minutes do
  runner "Ping.checkPings"
end
 

Ping.rb

 def checkPings      
  gate =  Net::Ping::External.new("10.10.1.1")
  @monitor_ping = Ping.new()

  if gate.ping?        
    MonitorPing.WAN = true
  else 
    MonitorPing.WAN = false
  end

  @monitor_ping.save      
end
 

97voto

Ashish Points 3221

Pour déclarer une méthode statique, écrivez ...

 def self.checkPings
  # A static method
end
 

... ou ...

 class Myclass extend self

  def checkPings
    # Its static method
  end

end
 

61voto

Simon Woker Points 3238

Vous pouvez utiliser des méthodes statiques dans Ruby comme ceci:

 class MyModel
    def self.do_something
        puts "this is a static method"
    end
end
MyModel.do_something  # => "this is a static method"
MyModel::do_something # => "this is a static method"
 

Notez également que vous utilisez une mauvaise convention de dénomination pour votre méthode. Cela devrait être check_pings place, mais cela n’affectera pas si votre code fonctionne ou pas, c’est juste le style ruby.

13voto

ssri Points 670

Changer votre code de

 class MyModel
  def checkPings
  end
end
 

à

 class MyModel
  def self.checkPings
  end
end
 

Notez que self est ajouté au nom de la méthode.

def checkPings est une méthode d'instance pour la classe MyModel alors que def self.checkPings est une méthode de classe.

-16voto

Jörg W Mittag Points 153275

Vous ne pouvez pas avoir des méthodes statiques dans Ruby. En Ruby, toutes les méthodes sont dynamiques. Il n'y a qu'un seul type de méthode en Ruby: dynamique des méthodes d'instance.

Vraiment, le terme méthode statique est un abus de langage de toute façon. Une méthode statique est une méthode qui n'est pas associé avec n'importe quel objet et qui n'est pas distribué de manière dynamique (d'où "statique"), mais ces deux sont à peu près la définition de ce que signifie être une "méthode". Nous avons déjà un nom parfaitement bien pour cette construction: une procédure.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X