Exclude a property on a model from save operations?

Hey guys :slight_smile:

I have some models that include computed fields, i.e. fields that aren't data as such on a table, but are computed using other fields in the table, like author.printed_name which is computed (on the sql server) by concatenating first names, last name, and name suffix.

If a try to save a model that has a property like this, the sql server throws an error that it can't modify a computed column. Which is understandable :slight_smile:

I just don't know how to prevent that particular property/column from being saved when doing author.save().

Anyone?

Thanks,

Daniel :slight_smile:

Hi Daniel,

Daniel Smedegaard Buus wrote:

I have some models that include computed fields, i.e. fields that aren't data as such on a table, but are computed using other fields in the table, like author.printed_name which is computed (on the sql server) by concatenating first names, last name, and name suffix.

Without having any intention of getting into a philosophical debate re: 'best way' ...

In Rails, you do this sort of thing in the Model rather than in the database. My recommendation would be to turn the field in the database into a 'normal' string, move the computation into a method in the model, and use a before filter to invoke it.

hth, Bill

Daniel Smedegaard Buus wrote:

I have some models that include computed fields, i.e. fields that aren't data as such on a table, but are computed using other fields in the table, like author.printed_name which is computed (on the sql server) by concatenating first names, last name, and name suffix.

If a try to save a model that has a property like this, the sql server throws an error that it can't modify a computed column. Which is understandable :slight_smile:

I just don't know how to prevent that particular property/column from being saved when doing author.save().

Have a look at the attr_readonly patch at    http://dev.rubyonrails.org/ticket/6896

And, if possible, remove the field from the DB entirely, and just use Rails to simulate a field that doesn’t really exist… unless there’s a specific reason for having your ‘faux’ field in the DB as opposed to in the environment accessing the DB.

Hey guys!

I had a look at the diff before doing anything else, and I didn't like that approach too much, really. So I asked around today if any other application was actually going to use this computed column, and it turned out that no, only the Rails app would be using it.

So, I chose to discard it, and implement the concatenation in Rails.

Thanks for everyone's tips!

Daniel :slight_smile: