簡體   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