I’ve been using Variants in Rails 4 to change my layouts for one controller action. It’s really straightforward – just set the variant name as a symbol, for example:
request.variant = :popup
Then name the template file with the variant name in it, e.g.
Another neat trick I discovered is that you can also use the variant to control the layout file. I wanted to have a different layout for my popup content, one that didn’t include all of the usual bumph like headers and menus. Turns out I didn’t need any other code, just create a template in my layout folder with the variant:
In addition to that, I can also use it with partials. Inside my haml file, I reference a partial as I would normally, and when the variant is set, it automatically chooses the partial with the variant if there is one.
... = render partial: 'customer' ...
Now I can use the popup variant across multiple controllers with this same simple layout.
I also discovered that setting variant to nil causes a problem. I wanted to do this:
request.variant = find_my_variant ... ... ... def find_my_variant return nil if some_logic_determining_no_variant :variant_name end
Instead I have to do this:
request.variant = find_my_variant unless find_my_variant.nil? ... ... ... def find_my_variant return nil if some_logic_determining_no_variant :variant_name end
I’m interested to know if there is a way to set a “blank” or default variant so that I can remove that extra check …