Ruby で少しメタプログラミングをしています。特にコントローラーで、いくつかのメソッドをメタ定義するライブラリを作成しています(アプリケーション用に作成する必要があるいくつかの find_by メソッドを自動化します)。
現在、特定のコントローラーのモデルの名前をメタプログラミング メソッドに渡す必要があるため、これらのメソッドを生成しています。ActiveRecord モデルに関連付けられているコントローラーにメソッドはありますか。
だから、これは悪い例です
module AwesomeGem
module ClassMethods
def write_some_methods_for(model)
raise "Class #{model.class} does not inherit ActiveRecord::Base" unless model < ActiveRecord::Base
define_method "money_remaining" do |id=nil|
moolah = id ? model.find(id).money : model.find(params[:id]).money
render text: moolah
end
define_method "money_remaining_poller" do |id=nil|
obj = id ? model.find(id) : model.find(params[:id])
# composes some ajax
render js: moneyjs
moneyjs
end
end
end
end
だから、この方法を使うために、私は
GamblerController < ApplicationController
write_some_methods_for Gambler
end
繰り返しますが、Gambler クラスをメソッドに渡す必要がないようにするにはどうすればよいでしょうか? モデルを直接呼び出すことができる何らかのメソッドまたは属性はありますか? 例えば。self.send(:モデル)
複雑な説明付きの簡単な質問。