Common Pitfalls

Below is a list of common problems that someone new to DataMapper will encounter, along with work-arounds or solutions if possible.

Implicit String property length

When declaring a String property, DataMapper will add an implicit limit of 50 characters if no limit is explicitly declared.

For example, the following two models will have the same behaviour:

1
2
3
4
5
6
7
8
9
10
11
12
13
# with an implicit length
class Post
  include DataMapper::Resource

  property :title, String
end

# with an explicit length
class Post
  include DataMapper::Resource

  property :title, String, :length => 50
end

The reason for this default is that DataMapper needs to know the underlying column constraints in order to add validations from the property definitions. Databases will often choose their own arbitrary length constraints if one is not declared (often defaulting to 255 chars). We choose something a bit more restrictive as a default because we wanted to encourage peolpe to declare it explicitly in their model, rather than relying on DM or the DB choosing an arbitrary limit.