Upgrading from Rails 3.2 to Rails 4.0 is not a trivial task. Sure, there is a guide, but when you upgrade you'll probably be upgrading a lot of your gems, maybe your jQuery and jQuery-UI versions and then there are all the undocumented unintentional changes that can cause you grief. If you've got a good test suite (you have one right?) you'll catch a lot of these, but some will leave you scratching your head. This one tripped me up for a while: we had a very simple scope stop working in Rails 4.
The scope model below works in Rails 3.2, but fails in Rails 4 when used with an association:
Tuesday, March 25, 2014
Friday, March 14, 2014
Rails: updating an association through nested attributes does not touch the owner
I was a little surprised to discover that when you update an association through nested attributes, it won't touch the parent record. It makes sense when you consider that Rails is optimizing by not writing records that have not changed, but if were using updated_at on the model for caching you may be surprised.
For instance:
For instance:
Wednesday, March 12, 2014
Caching user records when using Authlogic
Today, I ran across another form of this issue with Authlogic. In short, every request in a Rails application using Authlogic with a User model that includes a last_request_at column will cause the updated_at column to change. This can break caching that is based on the last time a user was updated.
Labels:
authlogic,
cache-control,
caching,
controllers,
etags,
rails
Friday, January 17, 2014
Quick local database saves and restores with postgres
I recently added this rake task to our project. It performs fast database saves and restores using another postgres database. This is a very handy rake task to have around if you need to quickly go back to a previous version of your database and the normal create/restore process is too slow (for instances, restoring using a scrubbed database backup hosted on S3)
Friday, January 10, 2014
Find the most popular capitalization of a word or phrase
Today, I needed to find the most popular capitalization of user entered product brands. Previously, I'd just used lowercase brands, something like this:
However, this was returning "whole foods" instead of "Whole Foods", which was considered more desirable.
Using window functions and common table expressions, this is what I came up with:
However, this was returning "whole foods" instead of "Whole Foods", which was considered more desirable.
Using window functions and common table expressions, this is what I came up with:
Tuesday, August 13, 2013
Adding Process ID and timestamps to the Rails Logger
For the last few days, I've been trying to debug a race condition between several Delayed::Job workers. After looking at log files for many hours, it became very frustrating to not know which one of my 3 workers was writing which statement. I finally found this post which almost did what I wanted.
To add process ids and timestamps to your Rails logs, you can add this as a Rails initializer (config/initializers/log_formatting.rb for instance) and restart your application / workers:
To add process ids and timestamps to your Rails logs, you can add this as a Rails initializer (config/initializers/log_formatting.rb for instance) and restart your application / workers:
Wednesday, May 8, 2013
How to write a simple Rails gem
Today, I wrote my first Ruby on Rails gem. It was a very simple refactoring of our code that I undertook when I needed to add the same functionality to a new model and I decided to do it as a gem instead of keeping it within our project. I wanted to see how it worked and this is what I ended up with. You can follow the Rails Guide, but it didn't cover everything I wanted to do.
Subscribe to:
Posts (Atom)