如何在ActiveSupport :: Concern中获取类名?

时间:2017-08-01 22:19:13

标签: ruby-on-rails ruby ruby-on-rails-4

我有课程用户,产品和订单。我有一个共同关注的Logger,我已经包含在每个中。我在Logger模块中有一个after_create回调,它将记录创建。我需要不同类型的类名和日志。

class User
  include Logger
  attr_accessor :name
end

class Product
  include Logger
  attr_accessor :name
end

class Order
  include Logger
  attr_accessor :name
end

我有记录器模块

module Logger
  extend ActiveSupport::Concern

  included do
    after_create :log_event
  end

  def log_event
    puts "#{<some way to get name of the class>} created now."
  end 
end

我想要“某种方式来获得班级名称”。我试过self.name(返回类的name属性中的值),self.class.name(返回Class),self.downcase(返回错误),self.table_name(返回错误)。请让我知道解决方案。我不必过多改变这种结构。

3 个答案:

答案 0 :(得分:2)

与在普通实例方法中获得它的方式相同。

def log_event
  puts "#{self.class} created now."
end  

您也可以self.class.name

答案 1 :(得分:0)

我想我找到了答案。我可以使用self.class.table_name来获取用户,产品等名称,即如果表名不是自定义的

答案 2 :(得分:0)

使用关注点时,您只能使用self.name而不是self.classself.class.name

示例:

def log_event
  puts "#{self.name} created now."
end