First thing you will need to decide is who will be the api and who will be the consumer.
Change their project to be public instead of private (In the Cloud 9 Project settings)
Add a new route to provide the data in json format:
get '/api/posts/json' do
json(Post.all())
end
Change the post.rb moel to override the default to_json method:
def as_json(options)
super(:include => [:user, :comments, :likes],
:methods => [:comment_count, :like_count, :humanized_time_ago])
end
Add the rest-client gem to your Gemfile:
gem 'rest-client'
You will need to run bundle install in the console and then restart your ruby app after doing this
Add a reference to the new gem at the top of your actions.rb
require 'rest-client
Add a new route (in actions.rb) to view the posts from the other server. Make sure you replace the <something else> URL with the URL of the api persons project:
get '/remoteposts' do
@posts = []
data = RestClient.get ('https://<something else>.c9users.io')
@posts = JSON.parse(data)
erb :remoteposts
end
Create a remoteposts.erb file that will dislay the data that was obtained fromthe API instead of your local database (ActiveRecord). Since this data is cometing through as a hash obect instead of ActiveRecord objects, we have to use the "old" style of referencing objects that you did before changing to ActiveRecord:
<main role="main">
<% @posts.each do |post| %>
<article class="post">
<div class="user-info">
<img src="<%= post["avatar_url"] %>" alt="<%= post["username"] %>">
<h2><%= post["username"] %></h2>
<h3><%= post["humanized_time_ago"] %></h3>
</div>
<a class="photo" href="#">
<img src="<%= post["photo_url"] %>" alt="post from <%= post["username"] %>">
</a>
<div class="actions">
<%= post["like_count"] %> likes
<span class="comment-count"><%= post["comment_count"] %> comment</span>
</div>
</article>
<% end %>
</main>
Now you should be able to go to your app url with /remoteposts and see pists from the other persons app. Have the add a new post and refresh your page to see if it shows up. Cool stuff!