Ruby on rails Rails中的ActionController::Base如何知道其模型是什么类?

Ruby on rails Rails中的ActionController::Base如何知道其模型是什么类?,ruby-on-rails,ruby-on-rails-3,metaprogramming,polling,actioncontroller,Ruby On Rails,Ruby On Rails 3,Metaprogramming,Polling,Actioncontroller,我正在用Ruby做一些元编程。我正在编写一个库来为我定义一些元方法,特别是在控制器中(通过我必须为我的应用程序编写的方法来自动化一些find_) 目前,我通过将特定控制器的模型名称传递到元编程方法中来生成这些方法。控制器中是否有绑定到ActiveRecord模型的方法 这是一个糟糕的例子 module AwesomeGem module ClassMethods def write_some_methods_for(model) raise "Class #{model.

我正在用Ruby做一些元编程。我正在编写一个库来为我定义一些元方法,特别是在控制器中(通过我必须为我的应用程序编写的方法来自动化一些find_)

目前,我通过将特定控制器的模型名称传递到元编程方法中来生成这些方法。控制器中是否有绑定到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
模块
模块类方法
def写入(模型)的某些方法
raise“类#{model.Class}不继承ActiveRecord::Base”,除非model
所以,为了使用这种方法,我计划

GamblerController < ApplicationController
  write_some_methods_for Gambler
end
GamblerController
再说一次,我怎样才能做到这样我就不必通过赌徒课程来学习我的方法呢?是否有某种方法或属性可以直接调用模型?自我发送(:模型)


一个带有复杂解释的简单问题。

默认情况下,控制器不绑定到特定模型。您可以让一个控制器与几个不同的模型一起玩,甚至可以让一个控制器完全不使用模型


如果您仍然希望代码在“经典”情况下自动工作,则可以查看控制器的名称,并查找具有相同名称的模型(遵循rails命名约定)。

默认情况下,控制器不绑定到特定模型。您可以让一个控制器与几个不同的模型一起玩,甚至可以让一个控制器完全不使用模型


如果您仍然希望代码在“经典”情况下自动工作,您可以查看控制器的名称,并查找具有相同名称的模型(遵循rails命名约定)。

self.class
是否没有提供您所需的?self.class
是否没有提供您所需的?