如何在关注点(或模块中)访问模型名称?

时间:2013-07-01 19:54:57

标签: ruby-on-rails

我在rails应用程序中遇到以下问题:

module Authenticable
  extend ActiveSupport::Concern

  included do
    # ...
  end

  module ClassMethods
    def quoted_table_name
      self.class.name.downcase.pluralize # returns "classes"
    end
  end
end

如果我有用户类:

class User
  include Authenticable
end

然后我希望User.quoted_table_name返回"users"。目前,User.quoted_table_name会返回"classes"。我也试过以下,但没有改变。

def quoted_table_name
  Proc.new { self.class.name.downcase.pluralize }.call
end

2 个答案:

答案 0 :(得分:5)

尝试以下方法:

module Authenticable
  ...

  module ClassMethods
    def quoted_table_name
      name.downcase.pluralize # returns "users"
    end
  end
end

self.class.name.downcase.pluralize不起作用,因为我们已经在User - 类的类侧操作。在询问User - 类的类时,会返回Class。但是,Class.name.downcase.pluralize是“课程”。

答案 1 :(得分:0)

除非您的用户模型中有方法name,否则很可能会发生:

def name
  [first_name, last_name].join
end

因此您可以使用self.table_name,如下所示:

module Authenticable
  ...

  module ClassMethods
    def quoted_table_name
      self.table_name # returns "users"
    end
  end
end