Here's a different (easier :) ) tack to monkey patching AR to solve this
problem efficiently. Turns out the actual serialization is done in
quote_value (and interestingly, done whether or not the column is
declared serialized; the serialized decleration only effects
de-serialization). Does anyone think this following approach is a good
idea?
Does anyone think it's a good enough idea I should submit it as a patch
to AR? I've never submitted a patch before, not sure how it's done. I'm
still using Rails 1.8.x, not sure if this is still a problem in Rails 2,
so that might make it hard to submit a patch.
class ActiveRecord::Base
alias :old_quote_value :quote_value
def quote_value(value, column = nil)
if column && serialized_attributes[column.name]
serialization = value.to_yaml
raise new ActiveRecord::StatementInvalid("Can not serialize
column #{column.name}, length #{serialization.length} is greater than
column limit of #{column.limit}") if if serialization.length >
column.limit
"#{connection.quoted_string_prefix}'#{connection.quote_string(serialization)}'"
else
old_quote_value
end
end
end
Mark Reginald James wrote:
> Jonathan Rochkind wrote:
>> itself?
> Yeah, the double yaml is a waste, but don't worry about it
> unless this is being done sufficiently often to slow down
> your app in a way that generates more work or cost.
>
> See if you can come up for a patch for Rails that automatically
> adds a such a validation for serialized attributes, where this
> validation method and the attributes_with_quotes method that
> generates the DB request both draw from a cache of YAMLized
> attribute values.
>
> --
> Rails Wheels - Find Plugins, List & Sell Plugins -
> http://railswheels.com
--
Posted via http://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Talk" 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/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---