首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在rails模型中为类方法设置别名?

如何在rails模型中为类方法设置别名?
EN

Stack Overflow用户
提问于 2015-04-28 06:34:53
回答 5查看 10.8K关注 0票数 26

我想在我的一个Rails模型上给一个类方法起别名。

代码语言:javascript
复制
  def self.sub_agent
   id = SubAgentStatus.where(name: "active").first.id
   where(type: "SubAgent",sub_agent_status_id: id).order(:first_name)    
  end

如果这是一个实例方法,我会简单地使用alias_method,但这不适用于类方法。如何才能在不复制方法的情况下做到这一点?

EN

回答 5

Stack Overflow用户

发布于 2015-04-28 06:38:44

您可以使用:

代码语言:javascript
复制
class Foo  
   def instance_method       
   end  

   alias_method :alias_for_instance_method, :instance_method

   def self.class_method
   end  

   class <<self  
     alias_method :alias_for_class_method, :class_method
   end  
 end  

或者尝试:

代码语言:javascript
复制
self.singleton_class.send(:alias_method, :new_name, :original_name)
票数 48
EN

Stack Overflow用户

发布于 2017-03-24 00:20:13

我可以证实:

代码语言:javascript
复制
class <<self
  alias_method :alias_for_class_method, :class_method
end

即使它是从基类继承而来的,也可以完美地工作。谢谢!

票数 1
EN

Stack Overflow用户

发布于 2017-10-26 22:48:38

要添加实例方法作为类方法的别名,可以使用delegate :method_name, to: :class

示例:

代码语言:javascript
复制
class World
  def self.hello
    'Hello World'
  end

  delegate :hello, to: :class
end

World.hello
# => 'Hello World'
World.new.hello
# => 'Hello World'

Link on documentation

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29907157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档