繁体   English   中英

从Rails中的印象派宝石中重新打开印象类4

[英]Reopen Impression Class from Impressionist Gem in Rails 4

我试图修改印象派宝石类“印象”无济于事。

我尝试过以下方法:

class Impression
  def hello
    "world"
  end
end

Impression.class_eval do
end

在:/app/models/impression.rb和/lib/impression.rb中(包含此文件夹的正确配置)

我究竟做错了什么? 我正在使用Rails 4.理想情况下,我想添加一个活动记录关联并添加一些帮助方法。

我假设您正在谈论这个宝石: https//github.com/charlotte-ruby/impressionist并想要更改模型类印象

从我可以看到它应该是一个rails引擎。

rails引擎用于命名空间,堆栈跟踪可能已经揭示了这一点。

你试过这个吗?

# app/extensions/impressionist/impression.rb
module Impressionist
  class Impression
    def hello
      "world"
    end
  end
end

您也可以尝试将代码放在初始化程序中,因为它也可能是加载顺序问题。

试试这个:

require Impressionist::Engine.root.join('lib/impressionist/models/active_record/impression')

class Impression
  def hello
    "world"
  end
end

如果您要覆盖gem提供的类,则需要手动要求您的版本来包含更改。 这通常在初始化程序中完成。

使用您自己的方法扩展模型类应该使用关注点来完成。 尝试将其放在lib文件夹中的文件中,并在初始化程序中将其要求:

require Impressionist::Engine.root.join('lib/impressionist/models/active_record/impression')

module ImpressionExtensions
  extend ActiveSupport::Concern

  def some_instance_method
    # do some stuff
  end

  module ClassMethods
    def some_class_method
      # do some stuff
    end
  end

end

Impression.send(:include, ImpressionExtensions)

应以类似的方式向任何模型添加方法。 Impressionist的工作方式有点不同,因为它首先将Impression类定义为常规的独立类,然后重写它并使其成为模型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM