2

私はruby-trelloでRubyコードのこの行を見たところです:

# Returns the member who created the action.
one :member_creator, :via => Member, :using => :member_creator_id

これは、次のように定義されたスーパークラスメソッドに関連しているようです。

def self.one(name, opts = {})
  class_eval do
    define_method(:"#{name}") do |*args|
      options = opts.dup
      klass   = options.delete(:via) || Trello.const_get(name.to_s.camelize)
      ident   = options.delete(:using) || :id
      klass.find(self.send(ident))
    end
  end
end

class_evalがリフレクションに関連していることを理解しています。

誰かがサブクラスのコード行の目的を説明してもらえますか?

私の推測では、名前としてone渡さ:member_creatorれるクラスメンバーと、引数として2つの末尾の引数を呼び出していると思いoptsます。しかし、なぜこれがクラスレベルで呼び出されるのでしょうか。

4

1 に答える 1

2

これは、主キーで単一のレコードを検索するために使用されるコードを乾燥させる方法のようです。

基本的に、クラス/モデル名と主キーの取得に使用されるメソッドを渡します。

このコード:

one :member_creator, :via => Member, :using => :member_creator_id

このメソッドを作成します:

def member_creator 
  Member.find(self.member_creator_id)
end
于 2012-12-03T16:46:50.327 に答える