component / model

Minimalistic extensible data models
122 stars 40 forks source link

added Model.primary(name) to set the key #50

Open ianstormtaylor opened 11 years ago

ianstormtaylor commented 11 years ago

I've been wanting to have a nicer way to set the primary key for a model. Instead of having to break the nice chainable API to do:

var Model = model('post')
  .attr('id')
  .attr('slug')
  .attr('title')
  .attr('body');

Model.primaryKey = 'slug';

Instead, we can add a chainable method to set the primaryKey. Note that I removed the model[attr].primaryKey = true piece of code because it seemed unnecessary and wasn't being used anywhere, so I figured it was a bit of feature creep for now.

Now setting a primaryKey would look like:

var Model = model('post')
  .attr('id')
  .attr('slug')
  .attr('title')
  .attr('body')
  .primary('slug');

But then I realized that there might even be a better way using the extra options we can tie to a specific property, which would look like this:

var Model = model('post')
  .attr('id')
  .attr('slug', { primary: true })
  .attr('title')
  .attr('body');

That last option seems the cleanest to me, and it builds on the existing API. (Note: that's not what's in the PR, so let me know if you like that one better and I'll submit another with it.)

tj commented 11 years ago

hmmm yeah I like the last one too

ianstormtaylor commented 11 years ago

how do you feel about changing primaryKey to primary? just worried about having both in there since the method is primary() and the current prop is primaryKey.

tj commented 11 years ago

SGTM

yocontra commented 10 years ago

Any updates on this?

ianstormtaylor commented 10 years ago

when https://github.com/component/model/pull/58 gets merged (sorry getting distracted) this will be fixed