I have two different layouts, one is completely custom and the other is bootstrap. For admins we want to render a bootstrap view and for non-admins we render it normally. For the most part this is pretty straight forward because admins and users don’t share many views — but there are some.
My original idea involved overriding render so that it would check if there’s a bootstrap version of a file. So for example there would be _user.html.erb and _user.bootstrap.html.erb which would have bootstrap specific templating.
I’d like to not modify any controllers so ideally, something like render 'form' would behave smartly and check if there’s an _form.bootstrap.html.erb, and if there isn’t it would fallback to _form.html.erb
First attempt
My first attempt looked something like this
# I don't think this is the actual method signature of render
def render(options=nil, extra_options, &block)
# if it should render bootstrap and options is a string and there exists a bootstrap version
# set it up to render the bootstrap view
super(options, extra_options, &b)
end
Current attempt
I’m thinking about registering a template that basically checks if a file exists and then uses erb. I haven’t made any progress towards this yet.
I figured it out. This is how I did it:
This is set in the application controller, with a
before_filter :render_bootstrapI decided to extend this even further so that inside of a view like
show.bootstrap.html.erbyou can still userender "form"without doingrender "form.bootstrap". This was done by overwriting the rails render helper.