[英]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.