加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何在Rails模型中创建多个类和实例方法

发布时间:2020-12-17 03:05:23 所属栏目:百科 来源:网络整理
导读:我这样做 def self.a ...enddef a class.aend 但是对于几种方法,我将不得不复制实例方法. 我在一个模块中思考 module A def a; endend 然后在我的模型中使用它,如下所示: extend Ainclude A 但我不知道在哪里根据Rails文件夹结构放置它,或者甚至将模块放在
我这样做

def self.a
  ...
end

def a
  class.a
end

但是对于几种方法,我将不得不复制实例方法.

我在一个模块中思考

module A
  def a; end
end

然后在我的模型中使用它,如下所示:

extend A
include A

但我不知道在哪里根据Rails文件夹结构放置它,或者甚至将模块放在我的模型中.

有什么建议?

解决方法

选项1 – 扩展自我

如果您希望将所有实例方法都作为类方法,则可以使用extend self

class A
  def foo
    ...
  end

  def bar
    ...
  end

  extend self
end

这将允许您将foo称为A.foo或A.new.foo.

选项2 – 包含的模块

如果您只希望某些实例方法可用作类方法,那么您应该按照建议创建一个模块.您可以将该模块放在lib /文件夹中,或者要求它或将lib添加到自动加载路径.

您也可以直接在类中包含模块,如下所示:

class A
  def not_shared
    ...
  end

  module SharedMethods
    def foo
      ...
    end

    def bar
      ...
    end
  end

  extend  SharedMethods
  include SharedMethods
end

选项3 – 代表

如果您正在使用Rails(或仅使用ActiveSupport),您还可以使用它添加到类/模块的委托方法.

class A
  def not_shared
    ...
  end

  def foo
    ...
  end

  def bar
    ...
  end

  delegate :foo,:bar,to: 'self.class'
end

详情请见此处:

http://rdoc.info/docs/rails/3.0.0/Module:delegate

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读