Method: ActionDispatch::Http::MimeNegotiation#variant=
- Defined in:
- lib/action_dispatch/http/mime_negotiation.rb
#variant=(variant) ⇒ Object
Sets the variant for the response template.
When determining which template to render, Action View will incorporate all variants from the request. For example, if an ‘ArticlesController#index` action needs to respond to `request.variant = [:ios, :turbo_native]`, it will render the first template file it can find in the following list:
-
‘app/views/articles/index.html+ios.erb`
-
‘app/views/articles/index.html+turbo_native.erb`
-
app/views/articles/index.html.erb
Variants add context to the requests that views render appropriately. Variant names are arbitrary, and can communicate anything from the request’s platform (:android, :ios, :linux, :macos, :windows) to its browser (:chrome, :edge, :firefox, :safari), to the type of user (:admin, :guest, :user).
Note: Adding many new variant templates with similarities to existing template files can make maintaining your view code more difficult.
#### Parameters
-
variant- a symbol name or an array of symbol names for variants used to render the response template
#### Examples
class ApplicationController < ActionController::Base
before_action :determine_variants
private
def determine_variants
variants = []
# some code to determine the variant(s) to use
variants << :ios if request.user_agent.include?("iOS")
variants << :turbo_native if request.user_agent.include?("Turbo Native")
request.variant = variants
end
end
137 138 139 140 141 142 143 144 145 |
# File 'lib/action_dispatch/http/mime_negotiation.rb', line 137 def variant=(variant) variant = Array(variant) if variant.all?(Symbol) @variant = ActiveSupport::ArrayInquirer.new(variant) else raise ArgumentError, "request.variant must be set to a Symbol or an Array of Symbols." end end |