2011-01-08 7 views
4

Railsのモデルは、このような特定の組み込みメソッドが付属しています:拡張Railsのモデルは

Appointment.new 
Appointment.find(1) 

私はAppointmentに複数のメソッドを追加するにはどうすればよいですか?それは明らかに方法をapp/models/appointment.rbに追加することによって行われていません。そうするとのメソッドがAppointmentに追加されますが、メソッドをAppointmentに追加したいと考えています。それ、どうやったら出来るの?

+2

をところで、あなたが探している用語は、「クラスメソッド」である(とは対照的に、 "インスタンスメソッド")。 – ryeguy

+0

よろしくお願いいたします。私はそれが何だったのだろうと思っていた。 –

+0

'MyClass.new'は、標準のRubyクラスインスタンスbtwをどのように起動するかです。これはRailsとは関係ありません。 –

答えて

12
def self.some_method 
    #do stuff 
end 
+3

さらに調査したい場合は、あなたが出てきた言語に応じて(あるいは、あなたがPythonから来た場合は両方で)、「クラスメソッド」または「静的メソッド」と呼ばれます。 – FlorianH

3

マークの答えは間違いなく正しいですが、クラスのメソッドを定義するときにも、次の構文が表示されます。

class Appointment 
    class << self 
    def method1 
     # stuff 
    end 

    def method2 
     # stuff 
    end 

    def method3 
     # stuff 
    end 
    end 
end 
+0

このようにしても利点はありますか?それはそうでなければひどく混乱するように思われるからです。 'class << self'は意味をなさない! –

+0

@Ashley私はこの構文の少なくとも2つの利点を考えることができます。 1)たくさんのクラスメソッドがある場合には、すべてのメソッドの前に 'self'を書く必要はありません。また、2)すべてのクラスメソッドがインデントされ、グループ化されています。あなたがこれまで見たことがないのであれば、混乱しますが、多くのRuby開発者が間違いなく使用しています。ここではRailsのアクティブなレコードソースにあります:https://github.com/rails/rails/blob/master/activerecord/lib/active_record/base.rb#L426 –

+0

私は実際にこの練習をたくさん見てきました(そして恥知らずにしかし、それはまだ完全に有効ではあるが、特にオープンソースのコードでは、外部者には理解してもらうために、不必要に秘密になっている '[* $ <]'のような、それを受け入れる。 Rubyは大部分の時間にエレガントな言語ですが、このような過度にスマートなコードを使用すると、助けになることができます。 –