class Ticket
  def price=(amount)
    if [Fixnum,Float].include? amount.class
      @price = amount
    else
      puts "The price seems to be malformed"
    end
  end
end

Ce qui à pour incidence ceci (irb --simple-prompt powered):

>> Ticket.new.price = 22
=> 22
>> Ticket.new.price = 'prix'
The price seems to be malformed
=> "prix"

Petite explication pour ceux qui n'ont pas compris ce qui est intéressant :
Cet exemple montre que ruby permet de tester de façon transparente l'assignement d'une valeur à une méthode (qui se trouve dans un objet instancié dans le cas présent). Ce code teste si amount est un nombre (entier ou flottant), et si oui, assigne cette valeur à price, ou affiche un message d'erreur. [1] Toute l'astuce est dans la définition de la méthode price : def price=(amount) et du signe = qui n'est pas annodin. C'est lui qui permet de faire passer pour assignement banal de valeur, à l'appel d'une méthode, qui est bien price= et non pas price.
De plus, Ruby gère le fait que vous mettiez ou non un espace entre price et = quand vous voulez lui assigner une valeur, donc :

Ticket.new.price = 22
# est strictement équivalent à 
Ticket.new.price= 22

Notes

[1] if [Fixnum,Float].include? amount.class signifie "si le tableau qui contient les constantes Fixnum et Float inclu la valeur 'classe de amount'". Étant donné que tout est une objet en ruby, un nombre est soit un entier (Fixnum), soit un flottant (Float), ce que vous pouvez vérifier par vous même dans irb en tappant 0.class. Voir aussi Test de valeurs, PHP & Ruby