0.0
No release in over 3 years
Low commit activity in last 3 years
Pass data from Ruby to Javascript without writing JS in your .erb view files
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

Runtime

>= 3.2
 Project Readme

Rails Hydration

Pass data from Ruby to Javascript without writing JS in your .erb view files.

Gem Version Code Climate

The Problem

When trying to pass data from Ruby to Javascript we end up doing something like:

<!-- app/views/posts/show.html.erb -->
<h1><%= @post_title %></h1>

<script>
  var postMeta = <%= @post_meta.to_json  %>
</script>

This works, but requires us to write our Javascript inline in .erb views (yuk).

Getting Started

Add the gem to your Gemfile:

# Gemfile
source 'https://rubygems.org'

gem 'rails_hydration'

Add the javascript to application.js — above other JS files that you want to use the helper in:

// app/assets/javascripts/application.js
//
//= require rails_hydration
//= require_tree .

In your views, pass Ruby data that you want to use in your Javascript via the hydration helper, giving it a unique key ("postMeta" in the example below):

# app/controllers/posts_controller.rb
class PostsController < ApplicationController

  def show
    @post_title = "My Post Title"
    @post_meta = {
      author: 'Jason',
      date: Date.parse("2014-10-12"),
      published: true
    }
  end

end
<!-- app/views/posts/show.html.erb -->
<h1><%= @post_title %></h1>

<%= hydration('postMeta', @post_meta) %>

In your Javascript, use the Hydration.onReady function the same way you would use jQuery's $(document).on('ready'). Your hydration data will be passed to your callback as the first argument:

// app/assets/javascripts/posts.js

Hydration.onReady(function(data){
  console.log('Post meta:', data.postMeta);
  //  {
  //    author: 'Jason',
  //    date: '2014-10-12',
  //    published: true
  //  }
});

You can add as many hydration tags to the page as you'd like, provided they each have a unique key ("postMeta" in the example above). As for the value, feel free to pass in strings, booleans, arrays, hashes, ActiveRecord objects, etc. The helper calls .to_json internally.