Haven't posted here in forever. Regardless, I've been keeping very busy. Last night I gave a presentation that walks through the various Date/Time classes in Ruby along with what ActiveSupport in Rails adds to them.
I’ve
run into the issue before where a Rails app doesn’t run on a server due
to a gem not being installed. Adding them to your application seems
like a perfect solution and deals with other computers possibly having
various versions of gems installed.
My
expectation was that when I create a hash it’s going to act like a
queue and be sorted in the order in which I inserted things. As I found
out today, that is definitely not the case.
There is a very easy way that Rails offers to give a hash this behavior and it’s the OrderedHash function found in the ActiveSupport libraries.
my_hash = ActiveSupport::OrderedHash.new
After that initialization, your hash will be maintained in the order you insert things. Something to watch out for.
I recently upgraded a few projects to Rails v.1.2 and had a couple of issues arise.
Disappearing objects when dropped using drag and drop in Safari
For one project I use the drag and drop re-ordering provided by the Scriptaculous
library. Not sure what did it, possibly even a Safari update, but only
in Safari, once you let go of a dragged object, that object would
disappear. It would come back when you refreshed the page and would
have successfully triggered its intended action.
I did
update my javascript files upon upgrading to v.1.2.1, but had not upon
the upgrade to v1.2.2 since I wasn’t aware of any changes. I think the
release of Scriptaculous on its actual site is newer (v1.7 right now)
than that included in Rails so I updated my scripts and that solved the
problem.
Model attributes not in the database were inaccessible
I
wasn’t able to figure this one out, but was able to get around it. I
have a model which has some methods to send/receive messages to a
device. I had a
attr_accessor :last_response
which is an attribute
that’s not in the database. It was simple a place to temporarily store
the full message of the last response for use later on in the code.
After the upgrade to v1.2.1 things were fine. However after updating to
v.1.2.2, I started getting “Method not defined” errors. It seems like
other people have hit this one, too.
My solution was simply to remove the property and change it to @last_response which worked for my limited use of it.
I’m
still scratching my head though, since similar attributes work fine in
other classes. The problem class, however, is unique in that instead of
having ActiveRecord:Base as its parent, the actual parent is a generic
class whose parent is ActiveRecord:Base.
I
haven’t updated my progress on the project I’ve been working on in a
while. This is somewhat due to simply getting caught up in the
development of it. I’ve also been working the past few weeks on
creating the CSS/HTML based on the delivered design. Here’s two things
I’ve learned about my experience since last time…
Don’t forget about running your tests
While
I think I did a good job creating unit tests, I definitely let my
functional tests slide. I have also not been religiously running my
existing tests, so it wasn’t much of a surprise that a number of them
were failing when I ran them again recently. As I fix them up, I’ll be
keeping track of where they would have helped me out.
One thing I do
know is where I need to have functional tests. I’m not nearly as
concerned with pages which do nothing but display information, mostly
ones where it would change, or redirect you based on security.
IE7 is much easier to style than IE6, but still not quite as good
Okay,
This isn’t really Ruby on Rails specific. This assumes you create
styles like I do. Create your CSS to work in Firefox and Safari and
then get it to work in IE. I did run into some IE7 weirdness, but
overall, there will be far less tweaks with it than you’d have with
IE6. I created separate stylesheets with IE6 and IE7 fixes and the IE7
one is roughly 80% smaller than the one for IE6.