I am trying to add a mixin to my controller dynamically depending on the request parameters like so :
# Controller
class QuantitiesController < Admin::BaseController
before_filter :extend_input_method, only: [:create, :new]
def extend_input_method
input_method = params[:input_method]
if input_method
send(:extend, "InputMethod::#{input_method.classify}".constantize)
end
end
end
# Mixin that gets included in the controller
module InputMethod::Single
include InputMethod::Helpers
def new
puts "CALLED #new" # Debug information
load_recent_entries
quantity
end
def create
@quantity = scoped_by_subject.new(process_attributes)
if @quantity.save
save_success
else
load_recent_entries
save_error
end
end
end
The new method never gets called but my template gets rendered without raising an exception, even if action_name is new and respond_to?("new") is true after extending the instance.
I’d like to understand why this isn’t working and how I can achieve something similar.
This is the solution I came up with. It works for my needs.