Я занимаюсь метапрограммированием в Ruby. Я пишу библиотеку для мета-определения некоторых методов для меня, особенно в контроллере (автоматизируйте некоторые методы find_by, которые я должен написать для своих приложений).Как ActionController :: Base in Rails знает, какой класс является его моделью?
В настоящее время я генерирую эти методы, передавая имя модели для конкретного контроллера в свой метод метапрограммирования. Есть ли в контроллере метод, который равен, привязанный к модели 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 (: model)
Простой вопрос со сложным объяснением.
Неужели 'self.class' не дает вам то, что вы ищете? – hwatkins