Is it possible to include module methods as controller actions and use them?
Yes.
Fred
How?
I've tried something like this:
module ControllerPeople def index puts 'index action' render :text => 'OK' end
def self.included(base) base.send :helper_method, :index end end
class PeopleController < ActionController::Base include ControllerPeople end
but, I get no method error 'index' in PeopleController.
Thanks, Dalibor
That's odd. I've done exactly that (but without the self included method - you don't need that) and it worked fine.
Fred
That's odd. I've done exactly that (but without the self included method - you don't need that) and it worked fine.
Fred
Yup, it works that way. But the problem is when I use before_filter in the controller to decide what module to be included.
Is there any solution for this or maybe any design pattern for polymorphic controllers (that are generated dynamically depending on some values in post data)?
That's odd. I've done exactly that (but without the self included method - you don't need that) and it worked fine.
Fred
Yup, it works that way. But the problem is when I use before_filter in the controller to decide what module to be included.
That's doesn't sound like a great idea - the modules that are included in the controller won't magically go away at the end of the request (except in development mode)
Is there any solution for this or maybe any design pattern for polymorphic controllers (that are generated dynamically depending on some values in post data)?
I've got the feeling you're overthinking things. What's wrong with
def some_action if foo bar else baz end end
or just redirect the user to a different controller depending on the post data.
Fred
Redirect would not work since I'm actually writing an API. And the problem with the above code is that it's kind of modularity programming. I should implement a versioning system for API (depending of the parameter in the request xml data, i.e. api_versions='2', that version of API responses)... I suppose only controller actions and their views would differ from version to version, and models are easy to handle with just extending the logic in them.
Yes, this could be done with interface, but I see it unnatural for rails MVC architecture.