我在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
答案 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