Hi,

I'm new to DataMapper but have found myself using it as I port a PHP
application to Rails, which has a completely un-rails-like schema.

My understanding is that DataMapper will only update:

a) Fields that it knows about (i.e. ones I've defined as properties)
b) Dirty values (i.e. it won't rewrite potentially) stale data

I have defined a Model class for User, just to test this, which
contains just a handful of the 80 or so columns in the database.

class User
        include DataMapper::Resource

        storage_names[:default] = :user

        property :id,              Serial,   :field => 'userid', :key => true
        property :username,        String
        property :email,           String
        property :activated,       Boolean,  :field =>
'isactivated', :default => false
        property :full_name,       String,   :field => 'fullname', :default
=> ''
        property :password_hash,   String,   :field =>
'passwordhash', :default => ''
        property :password_salt,   String,   :field => 'salt', :default => ''
        property :updated_at,      EpochTime,  :field => 'timemodified'
        property :logged_in_at,    EpochTime,  :field => 'timelastlogin'
        property :banned,          Boolean,  :field => 'isbanned', :default
=> false
end

Now, I can perform read operations quite happily, which got me all
excited, but then I tried the next logical thing: create a new user.

new_user = User.new
new_user.username = 'vssavfvabf'
new_user.email = '[email protected]'
new_user.full_name = 'Testing'
new_user.save

This throws the Exception:

DataObjects::SQLError "Field 'activationcode' doesn't have a default
value"

Our schema is huge and it pains me to think I may have to work through
it setting default values for each of the fields that don't have them
(which is almost all of them, since we just let MySQL set zero or an
empty string, or NULL if permitted).

But that aside, why is DM even touching this field?  Or if it's not,
what is actually happening and how can I work around it?  I know the
insert will work just fine without specifying a value, since MySQL
will just use an empty string as a fallback.  I'd rather not expressly
set all the defaults if I can avoid it, since this is an old legacy
application that has grown into a big hairy beast.  If I was designing
a new schema for a new app I'd not even think twice about it and move
on, but alas... :)

Any pointers?

Cheers,

Chris

PS: Can I turn something on so that all the queries being executed are
output or written to a log or some such, for quick and dirty debugging?

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

Reply via email to