I am using a plugin that adds a method to ActiveRecord::Base. The
added method is called self.create_or_update. I need to monkey patch
this method. I tried in lib/ config/initializers and in
environment.rb, but the one in the plugin is always the one that is
run.
Where do I put my version of the method so that it overrides that of
the plugin? I only use this method when running a rake task, so that
may have a bearing on the issue?
I am using a plugin that adds a method to ActiveRecord::Base. The
added method is called self.create_or_update. I need to monkey patch
this method. I tried in lib/ config/initializers and in
environment.rb, but the one in the plugin is always the one that is
run.
Showing us what you’ve tried would be a useful starting point.
I am using a plugin that adds a method to ActiveRecord::Base. The
added method is called self.create_or_update. I need to monkey patch
this method. I tried in lib/ config/initializers and in
environment.rb, but the one in the plugin is always the one that is
run.
Where do I put my version of the method so that it overrides that of
the plugin? I only use this method when running a rake task, so that
may have a bearing on the issue?
in vendor/plugins/db-populate/lib/create_or_update.rb:
class ActiveRecord::Base
given a hash of attributes including the ID, look up the record by
ID.
If it does not exist, it is created with the rest of the options.
If it exists, it is updated with the given options.
Raises an exception if the record is invalid to ensure seed data
is loaded correctly.
Returns the record.
def self.create_or_update(options = {})
id = options.delete(:id)
record = find_by_id(id) || new
record.id = id
record.attributes = options
record.save!
record
end
end
I want to replace it with:
db-populate monkey patch
Patched to work even when the primary key != id
require ‘active_record’
class ActiveRecord::Base
given a hash of attributes including the ID, look up the record by
ID.
If it does not exist, it is created with the rest of the options.
If it exists, it is updated with the given options.
Raises an exception if the record is invalid to ensure seed data
is loaded correctly.
Returns the record.
def self.create_or_update(options = {})
# Need to get the primary key, can’t assume it’s always id
id = options.delete(primary_key.to_sym)
record = send("find_by_#{primary_key}", id) || new
record.id = id
record.attributes = options
record.save!
record