- Posted by Randy on October 22nd, 2008
The other day I had to display the number of children items an object had so I decided to do the following:
# Controller
@customers = Customer.find(:all, :include=>[:receive_payments])
#View
<%= customer.receive_payments.count %>
While this worked for what I needed, it executed the following sql every iteration:
SELECT count(*) AS count_all FROM "receive_payments" WHERE ("receive_payments".customer_ref_list_id = E'850000-1071531366')
I thought this wasn’t right considering I used an association, however when you use count, it forces the use of count(*) on the database. This is where size comes in!!!!
<%= customer.receive_payments.size %>
Now we get the same results without the extra database counts!
- Posted by Randy on October 8th, 2008
Instead of spending hours trying to write something custom to convert your hash into xml or vice versa, you can do it in one line. If you are already in a Rails environment, you are good to go, but if using ruby, include the ActiveSupport gem:
require 'rubygems'
require 'active_support'
Now that you have, we can convert a xml to a hash:
hash = Hash.from_xml(xml_stream)
And a hash to xml is stupid simple:
There you have it, simple xml to hash and hash to xml!
- Posted by Randy on September 24th, 2008
I have decided to take a stab at using squidoo effectively, while promoting a clickbank product to hopefully make some sales. I was over at potpiegirl.com and her posts really inspired me to try harder. I contacted her and asked her for some tips, which she gladly helped out with.
I pulled together a squidoo lens, which that in itself can be overwhelming, and came up with a page promoting creating free electricity. I am no expert, so I’m not even sure if what I’m doing will work. Hopefully it works out well!
On a side note, you can follow me on twitter 
- Posted by Randy on September 23rd, 2008
Couldn’t help it, but this made me laugh. Got the same response from co-workers I passed it around to:

- Posted by Randy on September 23rd, 2008
I had an application that was prompting a HTTP Authentication box in IE after using the restful authentication plugin. The way I fixed it was to replace the access_denied method in lib/authenticated_system.rb to:
def access_denied
respond_to do |format|
format.any do
#format.html do
store_location
redirect_to new_session_path
end
#format.any do
# request_http_basic_authentication 'Web Password'
#end
end
end
Noticed I commented some lines out. This was so that if i ever need to revert, the code will still be there and I wont have to go looking for it. Hope this helps!
- Posted by Randy on September 10th, 2008
If you weren’t already aware of this, there IS a difference between using route_url and route_path. Here are what they return:
<%= posts_url %> # => http://localhost:3000/posts
<%= posts_path %> # => /posts
As a general rule of thumb, you would want to use posts_url in your controllers, and posts_path in your views.
- Posted by Randy on September 9th, 2008
While this isn’t a ruby on rails specific issue, I do tend to do this a lot, and never thought twice about it, until it starts bugging the crap out of me.
The issue is that you have a link that is used to do some type of javascript, instead of linking. So you add an onclick event, but you need something to link to. I usually put in a # sign:
<a href="#" onclick="dosomething();">Do Something</a>
<%= link_to 'Do Something', '#', :onclick=>'dosomething()' %>
This is great, except that it jumps you to the top of the page. Very annoying. Here is the solution:
<a href="#nogo" onclick="dosomething();">Do Something</a>
<%= link_to 'Do Something', '#nogo', :onclick=>'dosomething()' %>
Notice I added “nogo” to my #. This will help prevent from jumping to the top of the page. You can of course use any text you want there.
- Posted by Randy on September 4th, 2008
The guys over at NeverBlock have released a database adapter for Rails application that will severely increase the performance of ActiveRecord. Its also really easy to integrate into your application. Heres how:
Add a line to environment.rb for mongrel or thin servers:
require 'never_block/servers/thin'
or
require 'never_block/servers/mongrel'
Change the adapter in database.yml:
adapter: neverblock_postgresql
or
adapter: neverblock_mysql
You can also specify the number of connections (default of 4):
More information, along with benchmarks, can be found here.
- Posted by Randy on August 29th, 2008
I’m sure you all know how to use the :conditions attribute when using ActiveRecord:
User.find(:all, :conditions=>['active = ?', true])
And you may even use associations this way:
User.find(:all, :include=>[:photos], :conditions=>['photos.removed = ? and users.active = ?', false, true])
But did you know that you can do this easier through hashes?
User.find(:all, :conditions=>{:active=>true})
User.find(:all, :include=>[:photos], :conditions=>{'photos.removed'=>false, 'users.active'=>true})
Nothing special there, but I thought it was pretty cool. One thing you have to remember when using associations, is to include that model.
- Posted by Randy on August 26th, 2008
Sometimes you need to create another environment for your rails application aside from development, test, production. In this example we will create a “stage” environment. Here is how you do it.
First create the entry in your config/database.yml file:
# Stage database configuration
stage:
adapter: sqlite3
database: db/stage.sqlite3
timeout: 5000
Next create a file called stage.rb and place it into config/environments. I usually just copy my development.rb file and then change the values as needed:
Finally, In your config/environment.rb file, change the ENV['RAILS_ENV'] to:
ENV['RAILS_ENV'] ||= 'stage'
Now when you boot up your server or console, just specify the “stage” environment.