Lets say that I want to have one url that can map to two different controllers. For example /posts could map to controller 'public/ posts' or to the controller 'admin/posts' based on whether or not the user has logged in. This isn't a great example because I could just use the url '/admin/posts', but in my scenario the url has to be the same.
I was hoping to use a before_filter to either render one action or the other. It looks like render_component would have let me accomplish this, but it has been deprecated.
Why isn't it possible to use the same controller and conditional views?
I mean, wouldn't it be easier and more standard to use helpers and conditions within views than calling a different controller?
If you need different methods to be executed depending on user roles, you could call the same controller and define it like this one:
class Posts < ApplicationController
#do common stuff if user.role == 'admin' admin_index else user_index end
private def admin_index
#admin methods to be executed
Remember to test your views, in case you call any variable that's not defined in both actions.
Hope it helps.
Francisco, that would definitely work in some cases, but in mine I really need to have a separate controller when certain conditions are meant. It would be great if the :conditions on the route maps allowed you more options than just :method!
you could redirect to admin/posts using a before_filter.
redirect_to admin_post_path and return false if current_user.admin
The routes shouldn't really have any logic in them other than routing logic, e.g checking what path information was supplied and then redirecting you to the appropriate controller / action