If you just want a string with a restricted set of values, just define the 
column as String and use a :validates_within validation rule:

class SomeModel
  include DataMapper::Resource
  ...
  property :status, String
  
  validates_within :status, :set => ['open', 'closed']
end

You'll have to write the migration yourself if you want that field to be 
defined as a MySQL ENUM though (i.e. use dm-migrations and use the #execute 
method to run the SQL).


On 27/06/2011, at 20:01, Pierre wrote:

> Hello chris thanks for your answer
> 
> Unfortunately I didn't find good doc for making my own types but I
> guess it would be easy to create an enum type which would be a string
> with a list of restricted values.
> 
> The same for the type flags exept that values would be splited to an
> array when it gets out of the db and would be joined before it gets in
> the db.
> 
> Does anyone know a good doc about creating types ?
> 
> On Jun 26, 4:38 pm, Chris Corbyn <ch...@w3style.co.uk> wrote:
>> I prefer to write my own migrations and expressly define the column as ENUM.
>> 
>> Interesting, MySQL accepts both integer and string values for ENUMs (order 
>> important):
>> 
>> mysql> CREATE TABLE tbl (
>>     ->   options ENUM('foo', 'bar') NOT NULL DEFAULT 'foo'
>>     -> );
>> Query OK, 0 rows affected (0.02 sec)
>> 
>> mysql>
>> mysql> INSERT INTO tbl VALUES ('foo'), ('foo'), ('bar');
>> Query OK, 3 rows affected (0.00 sec)
>> Records: 3  Duplicates: 0  Warnings: 0
>> 
>> mysql> SELECT * FROM tbl WHERE options = 1;
>> +---------+
>> | options |
>> +---------+
>> | foo     |
>> | foo     |
>> +---------+
>> 2 rows in set (0.00 sec)
>> 
>> mysql> SELECT * FROM tbl WHERE options = 2;
>> +---------+
>> | options |
>> +---------+
>> | bar     |
>> +---------+
>> 1 row in set (0.00 sec)
>> 
>> mysql>
>> 
>> On 26/06/2011, at 23:05, Pierre wrote:
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>>> Hello all,
>> 
>>> Datamapper is great, but I don't understand how enum and flags works
>>> with mysql adapter.
>> 
>>> First, they both create a integer field in the table which is annoying
>>> because it sould be respectively an enum field and a set field.
>> 
>>> Then I don't understant how to work with these integer values. For
>>> exemple I'm triying to do something like that :
>> 
>>> some_model = SomeModel.get(1)
>>> Description.all(:conditions => ['color_list = NULL OR color_list = ?',
>>> some_model.color])
>> 
>>> With color_list a Flag property and color an enum property from a
>>> model called some_model. It's not working.
>> 
>>> Thanks,
>> 
>>> Pierre
>> 
>>> --
>>> You received this message because you are subscribed to the Google Groups 
>>> "DataMapper" group.
>>> To post to this group, send email to datamapper@googlegroups.com.
>>> To unsubscribe from this group, send email to 
>>> datamapper+unsubscr...@googlegroups.com.
>>> For more options, visit this group 
>>> athttp://groups.google.com/group/datamapper?hl=en.
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "DataMapper" group.
> To post to this group, send email to datamapper@googlegroups.com.
> To unsubscribe from this group, send email to 
> datamapper+unsubscr...@googlegroups.com.
> For more options, visit this group at 
> http://groups.google.com/group/datamapper?hl=en.
> 

-- 
You received this message because you are subscribed to the Google Groups 
"DataMapper" group.
To post to this group, send email to datamapper@googlegroups.com.
To unsubscribe from this group, send email to 
datamapper+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/datamapper?hl=en.

Reply via email to