version : Rails 3.2.22.2
我使用Impressionist gem来跟踪用户活动: https://github.com/charlotte-ruby/impressionist
这给了我ActiveModel::MassAssignmentSecurity::Error
。
我想覆盖gem中的Impression
模块以使用attr_accessible
。
我尝试了两件事:
1:在impression.rb
app/models
文件
class Impression
def hello
"hello world"
end
end
在initializer/impression.rb
,
require 'impression'
当我在控制台上尝试以下操作时:
a = Impression.first
a.hello
我找不到方法错误。
2:我在initializezs/impression.rb
文件中添加了代码:
Impression.class_eval do
def hi
puts 'you got me!'
end
end
我仍然得到与第1点相同的错误。
如何从gem中有效地覆盖模型?
答案 0 :(得分:3)
我做了以下修改以使我的代码工作。在初始化程序下,我创建了一个文件 - > initializer/my_monkey_patch.rb
以下代码
class Impression < ActiveRecord::Base
attr_accessible :impressionable_type, :impressionable_id, :controller_name, :action_name, :user_id, :request_hash, :session_hash, :ip_address, :referrer
def hello
"hello WORLD!"
end
end
感谢@Mohammad Shahadat Hossain的所有帮助
答案 1 :(得分:2)
我更愿意选择2种方法。但是你已经在课堂上看到了你的方法。然后,为了覆盖它,您需要在model/impression_decorator.rb
中使用。
Impression.class_eval do
attr_accessor :something
def hi
puts 'you got me! #{someting}'
end
end