저는 Ruby에서 약간의 메타 프로그래밍을하고 있습니다. 나는 meta-define을위한 라이브러리를 쓰고 있는데, 특별히 컨트롤러에서 (필자의 어플리케이션을 위해 작성해야하는 find_by 메소드를 자동화한다.) 몇 가지 메소드를 정의한다.레일스에서 ActionController :: Base는 모델의 클래스를 어떻게 알 수 있습니까?
현재 특정 컨트롤러의 모델 이름을 메타 프로그래밍 방식으로 전달해야 이러한 메소드가 생성됩니다. 이 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
에 계획 빈약 한 예를하고, 어떻게 그렇게 내가 통과하지 않아도 만들 수 도박꾼 수업을 내 방법으로? 모델을 직접 호출 할 수있는 일종의 메소드 나 속성이 있습니까? 예. self.send (: model)
복잡한 설명이있는 간단한 질문입니다.
'self.class'는 당신이 찾고있는 것을주지 못합니까? – hwatkins