• Ł
    Action Pack Variants · 2d3a6a0c
    Łukasz Strzałkowski 提交于
    By default, variants in the templates will be picked up if a variant is set
    and there's a match. The format will be:
    
      app/views/projects/show.html.erb
      app/views/projects/show.html+tablet.erb
      app/views/projects/show.html+phone.erb
    
    If request.variant = :tablet is set, we'll automatically be rendering the
    html+tablet template.
    
    In the controller, we can also tailer to the variants with this syntax:
    
      class ProjectsController < ActionController::Base
        def show
          respond_to do |format|
            format.html do |html|
              @stars = @project.stars
    
              html.tablet { @notifications = @project.notifications }
              html.phone  { @chat_heads    = @project.chat_heads }
            end
    
            format.js
            format.atom
          end
        end
      end
    
    The variant itself is nil by default, but can be set in before filters, like
    so:
    
      class ApplicationController < ActionController::Base
        before_action do
          if request.user_agent =~ /iPad/
            request.variant = :tablet
          end
        end
      end
    
    This is modeled loosely on custom mime types, but it's specifically not
    intended to be used together. If you're going to make a custom mime type,
    you don't need a variant. Variants are for variations on a single mime
    types.
    2d3a6a0c
lookup_context.rb 7.6 KB