The trickiest part of this type of architecture is handling problems like multiple updates to the same object from different sources. Since it sounds like you are not going to have much of that – but it does need to be handled in some way if it can happen at all!
Google’s Protobuf stuff is pretty good for packaging data in a cross language portable way and is much faster than JSON in RoR. But if your volume of data and connections is reasonable, then JSON is pretty easy to deal with in Ruby, Java and I assume Swift.
Using simple object APIs in RoR is what we have done in the past. If you don’t use some external service, you usually end up creating a simple protocol for the phones to use to communicate with the back end.
Communications from the server to the phone can be done in an easy way by having the mobile device periodically check for updates, at which time the server can tell it what messages it needs. The more complicated way is to use the platform notification system (On Android it is Google Cloud Messaging) to tell the device to check-in with the server. The important point is that these push notification systems don’t typically guarantee delivery. Google for example says it may deliver 1 message even if you send 10. So that means you really only want to use it to poke the app into checking in with the server.