Skip to content

Pass data from Ruby to Javascript the right way

License

Notifications You must be signed in to change notification settings

justworkshr/rails-hydration

Repository files navigation

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.

About

Pass data from Ruby to Javascript the right way

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published