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 = {
firstName(blank:false)
lastName(blank:false)
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_datevalidates_presence_of :first_name, :last_name, :email
end
class Address <>has_one :address
belongs_to :person
end
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
end
Note:
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.