Tropical Software Observations

20 March 2009

Posted by Teo Choong Ping

at 9:40 AM


Labels: ,

Grails and Rails: Domain Classes and Web Services

Let's take a brief look at the differences between Grails and Rails in term of persisting domain classes and creating web services. Both Grails and Rails are MVC frameworks and are very similar in terms of code syntax.

1. Domain Class Persistence

In Grails:

class Person {
String firstName
String lastName
String email
Date birthDate
Address address

static constraint = {
email(blank:false, email:true) // check if it's really e-mail

class Address {
String street
String city
String country
Person person

static belongsTo = Person

In Rails, attributes can be inferred from the database table's structure:

class Person <>
# Expects database schema to have a table "person"
# with columns first_name, last_name, email, birth_date

validates_presence_of :first_name, :last_name, :email

class Address <> has_one :address
belongs_to :person

2. Making a service class available as a web service

In Grails, inside a controller closure:

def listAllPeople = {
def pplList = Person.list() // or by query Person.findByLastName("Hewitts")
render pplList as XML
// render pplList as JSON

In Rails, inside a controller block:

def listAllPeople
@pplList = Person.all # or by query Person.find_by_last_name("Hewitts")
render :xml => @pplList
# render :json => pplList

1. Grails will auto-generate the database schema and update the schema when more domain fields are added to the class. It's also possible to go in the reverse direction if you prefer starting with an existing schema.
2. Rails expects the database schema to be pre-created and to conform to camel case naming conventions.
3. Grails has the notion of service classes which are commonly used for business logic and can be use in a controller as a web service end point.