Spree Variant Options

Spree Variant Options is a very simple spree extension that replaces the radio-button variant selection with groups of option types and values. To get a better idea let's let a few images do the explaining.

When no selection has been made:

Spree Variant Options - No selection

After "Large" is selected, "Large Blue" is out of stock:

Spree Variant Options - Option Type/Value selected

And after "Green" is selected:

Spree Variant Options - Variant Selcted

To see it in action, follow the steps for "Demo" below.


To install Spree Variant Options, just add the following to your Gemfile:

gem 'spree_variant_options', github: 'vinsol-spree-contrib/spree_variant_options'

Now, bundle up with:


Next, run the install generator to copy the necessary migration to your project and migrate your database:

rails g spree_variant_options:install
rake db:migrate

Configuration Options

Spree Variant Options comes with some handy options:

  • allow_select_outofstock (default : false)
    When using extension like (spree_wishlist), you might want to allow your customer to add out of stock product by selecting out of stock variant options :
    <%= form_for Spree::WishedProduct.new, :html => {:"data-form-type" => "variant"} do |f| %>
    <%= f.hidden_field :variant_id, :value => @product.master.id %>
    <button type="submit" class="medium blue awesome">
    <%= t(:add_to_wishlist) %>
    <% end %>

    By setting allow_select_outofstock to true, when an user selects variant options it will automatically update any form's input variant_id with an data-form-type="variant" attribute.

  • default_instock (default: false)
    If this is option is set to true, it will automatically preselect in-stock variant options.

These configuration options can be set in a config/initializers/spree_variant_options.rb file for example :
SpreeVariantOptions::VariantConfig.allow_select_outofstock = true
SpreeVariantOptions::VariantConfig.default_instock = true

Storage options

Like in spree core there is support for storage of images on S3.
Storage on S3 is enabled with the same configuration as in spree core.

Example: config/initializers/spree.rb

Spree.config do |config|
  config.use_s3 = true
  config.s3_bucket = <bucket_name>
  config.s3_access_key = <aws_access_key>
  config.s3_secret = <aws_secret_key>


Be sure to bundle your dependencies and then create a dummy test app for the specs to run against.

bundle install
bundle exec rake test_app
bundle exec rspec spec


If you'd like to help out feel free to fork and send me pull requests!


Copyright (c) 2011 - 2012 Spencer Steffen and Citrus, released under the New BSD License All rights reserved.


No comments yet

Please login to add comment.