Posted by Chirag Patel on July 8, 2008
Using this as a guide JLHPBv2: Using Helpers in Models in Rails, you can make a single Module that can be accessed from models, views, and controllers. The helpers automatically created in app/helpers/*_helpers.rb might also be available anywhere as long as you include them.
I decided to make the methods in the helper class-scoped (using self below) so that the origin of the helper method is explicitly obvious in the call (eg. to_s below)
app/lib/utility_helper.rb
module UtilityHelper
def self.camelcase_to_spaced(word)
word.gsub(/([A-Z])/, " \\1").strip
end
end
app/models/event.rb
class Event < ActiveRecord::Base
include UtilityHelper
def to_s
UtilityHelper.camelcase_to_spaced("This an Event object")
end
end
app/helpers/events_helper.rb
module EventsHelper
include UtilityHelper
end
app/controllers/event_controller.rb
class EventController < ApplicationController
include UtilityHelper
end
app/views/events/index.html.erb
<%=UtilityHelper.camelcase_to_spaced(event[:event_type])%&rt;
Posted in Ruby on Rails, Uncategorized | 2 Comments »
Posted by Chirag Patel on June 19, 2008
I just installed FiveRuns TuneUp it’s great! A small header shows up on all your apps (see attachment). I run it locally only
It’s drop dead easy to install:
- To add TuneUp to your Rails application, install the gem:
sudo gem install fiveruns_tuneup
- Then, for a Rails 2.0.x app, run:
fiveruns_tuneup /path/to/rails/app
- For a Rails 2.1 app, update your environment.rb to include this line:
config.gem ‘fiveruns_tuneup’
- Launch your Rails app and you’ll see the header to sign up for for a free account view the stats.

Posted in Ruby on Rails | Leave a Comment »
Posted by Chirag Patel on January 23, 2008
Posted in Ruby on Rails | Leave a Comment »
Posted by Chirag Patel on December 22, 2007
Error when updating the user from a form
ActiveRecord::RecordInvalid (Validation failed: Password confirmation can’t be blank, Password is too short (minimum is 4 characters), Password can’t be blank):
Suggestion
It’s probably because of the restrictions on the User model (attr_accessible or attr_protected, in particular). But allowing users access to any part of the User model via mass assignment is dangerous. That’s why many people create a separate Profile model and link it via a 1:1 (belongs_to, has_one) relationship.
Solution
Coming soon
Posted in Ruby on Rails | 2 Comments »
Posted by Chirag Patel on December 19, 2007
This is what I had to do to get it to work on CentOS 5. For some reason, FreeType would not work with yum so I built it from scratch. I’m not sure if the all the “yum install”s were needed, but I did it anyway.
#yum install freetype — did not work
cd /usr/local/src
wget http://download.savannah.gnu.org/releases/freetype/freetype-2.3.5.tar.gz
tar xvzf freetype-2.3.5.tar.gz
./configure
make
make install
yum install glib
yum install glib2
yum install libpng
yum install libjpeg
yum install libtiff
yum install ghostscript
yum install freetype
cd /usr/local/src
wget http://image_magick.veidrodis.com/image_magick/ImageMagick.tar.gz
tar xvzf ImageMagick.tar.gz
cd ImageMagick-X.Y.Z
./configure –disable-static –with-modules –without-perl –without-magick-plus-plus –with-quantum-depth=8 CFLAGS=-fPIC
make
make install
wget http://files.rubyforge.mmmultiworks.com/rmagick/RMagick-1.15.11.tar.gz
tar zxvf RMagick-1.15.11.tar.gz
cd RMagick-1.15.4
./configure
export LD_LIBRARY_PATH=/usr/local/lib
echo $LD_LIBRARY_PATH
make
make install
#test Rmagick in Rails
root# ruby script/console
irb(main):001:0> require ‘RMagick’
irb(main):002:0> include Magick
=> Object
irb(main):003:0> img = ImageList.new “test.jpg”
=> [test.jpg JPEG 10x11 DirectClass 8-bit 391b]
irb(main):004:0> img.write “test.png”
=> [test.jpg=>test.png JPEG 10x11 DirectClass 8-bit]
irb(main):005:0>
Posted in Linux, Ruby on Rails | Leave a Comment »
Posted by Chirag Patel on December 16, 2007
PostgreSQL 8.2.5 error
== CreateHeartrates: migrating ================================================
– create_table(:heartrates)
NOTICE: CREATE TABLE will create implicit sequence “heartrates_id_seq” for serial column “heartrates.id”
rake aborted!
PGError: ERROR: multiple default values specified for column “id” of table “heartrates”
: CREATE TABLE heartrates (“id” serial primary key DEFAULT NULL, “user_id” integer DEFAULT NULL, “timestamp” timestamp with time zone DEFAULT NULL, “heartrate” smallint NOT NULL)
Solution
I don’t see the above error on my Lenovo Windows machine because it’s running PostgreSQL 8.2.4. The issue occurs with PostgreSQL 8.2.5
Add this to the create table migration
t.column :id, :primary_key, :null => false
This is probably the simplest way to deal with this defect.
Post from: Migrations and PostgreSQL Primary Keys) – Rails Trac – Trac:
I tried to find a good place to patch the code, but everywhere I did, I could easily imagine someone yelling, “you can’t touch that”!
For instance, if scheme_definitions.rb’s primary_key could set :null => false, then everyone should be happy, even other db’s. Except, that of course you change all db’s to ‘NOT NULL’ versus ‘DEFAULT NULL’. I don’t know why you’d want to say ‘DEFAULT NULL’ though, it seems vaguely wrong.
This seems to be still in rails 2.0 too, and is still in 1.2.6.
-Adam
Posted in PostgreSQL, Ruby on Rails | Leave a Comment »
Posted by Chirag Patel on October 3, 2007
This is what I did when I was trying to connect to #rubyonrails channel and kept getting thrown into #overflow.
I executed the following command twice (while I was still in #overflow)
/msg nickserv register <your-password>
The first time I ran it, I got the following message:
*** -NickServ- Please wait 120 seconds before using REGISTER again
I waited a while and got this after running it a second time
:*** -NickServ- Your nickname is now registered with the password [<my-password> ].
Last, I ran the following command for good measure:
/msg nickserv register <your-password>
And got the following result:
*** -NickServ- You have already identified
Posted in Ruby on Rails | Leave a Comment »
Posted by Chirag Patel on September 25, 2007
The regular scaffold generator (e.g. ruby script/generate scaffold model controller) requires you to create your model and controller first. The scaffold_resource generator, on the other hand, generates the (RESTful) model and controller for you. For example:
ruby script/generate scaffold_resource Caregiver first_name:string last_name:string
In Rails 2.0, use resource instead:
ruby script/generate scaffold Caregiver first_name:string last_name:string
Here’s everything you get:
Views for all the CRUD operations and a layout
create app/views/caregivers/index.rhtml
create app/views/caregivers/show.rhtml
create app/views/caregivers/new.rhtml
create app/views/caregivers/edit.rhtml
create app/views/layouts/caregivers.rhtml
Model
create app/models/caregiver.rb
Controller with methods for CRUD operations
create app/controllers/caregivers_controller.rb
Helper
create app/helpers/caregivers_helper.rb
Looks like this initially
module CaregiversHelper
end
Migration to create the table in the database
create db/migrate/003_create_caregivers.rb
Looks like this:
class CreateCaregivers < ActiveRecord::Migration
def self.up
create_table :caregivers do |t|
t.column :first_name, :string
t.column :last_name, :string
t.column :address, :string
t.column :city, :string
t.column :state, :string
t.column :home_phone, :string
t.column :work_phone, :string
t.column :cell_phone, :string
t.column :relationship, :string
t.column :email, :string
end
end def self.down
drop_table :caregivers
end
end
Sets up route in config/routes.rb for REST
map.resources :caregivers
Posted in Ruby on Rails | 1 Comment »
Posted by Chirag Patel on September 12, 2007
Partial basics
Some different things about passing parameters to partials
- Basics of passing parameters (i.e. locals) into partials – Why are parameters for partials (
locals) passed differently than params for urls?!? Don’t know, but basically use the locals hash in both the render call and use the name of the local in the partial itself. This link also shows how to explicitly check for local parameter in case it’s nil
- Making a partial use optional parameters – Basically, set the parameter to
nil inside the partial (e.g. title = nil unless defined?(title))
- Why passing locals in partials is preferred over @variables – Partials can see the
@variables of its parent view, but instead pass the variables as parameters for clarity in complex code bases
Debugging partials
- be sure to look at console log (and/or development log), it will show the parameters being passed
Posted in Ruby on Rails | Leave a Comment »
Posted by Chirag Patel on September 12, 2007
I decided to use BackgrounDrb 0.2.1 to launch a periodic task that would run every 15 seconds.Warning: After going through the hassle of setting up BackgrounDrb, I found out that it isn’t even supported in Windows (my dev environment)! See step 8. So, these instructions haven’t been fully tested yet on a *.nix environment. Good luck and please post comments if you have any helpful suggestions.
- Install BackgroundDrb:
svn co http://svn.devjavu.com/backgroundrb/tags/release-0.2.1 backgroundrb
- Setup BackgroundDrb:
rake backgroundrb:setup
- Generate worker thread (
Foo is capitalized): ruby script/generate worker Foo
- In one of your controllers, create new worker with
Middleman object (:foo_worker is lowercase with underscore)
MiddleMan.new_worker(:class => :foo_worker,
:args => "Arguments used to instantiate a new HeartratepostWorker object",
- Instantiate
Middleman object in environment.rb (you might not need this with version 0.2.1 of BackgrounDrb)
require "drb" DRb.start_service
MiddleMan = DRbObject.new(nil, "druby://localhost:22222"
- Install the daemons gem if you haven’t already:
gem install daemons
- Install the slave gem if you haven’t already:
gem install slave
- Start the BackgroundDrb server in a separate command window:
ruby script\backgroundrb start
- If you get the error “
ERROR: there is already one or more instance(s) of the program running”, delete log\backgroundrb.pid
- Windows users are out of luck! You’ll get this message:
`fork': the fork() function is unimplemented on this machine. Here’s a message from Ezra (the devleoper of BackgroundDrb) about Windows support:
- “Unfortunately that won’t cut it in this case, I wish it would. Slave does more then just fork. It uses ipc and a few other things that just don’t work yet on windows. There is a possibility it could be made to work but right now it does not, even with win32 process (gem). -Ezra Wed Nov 29 16:19:03 EST 2006″
- Debugging methods if things don’t work well
Notes
- You might want to restart the backgroundrb server after you’ve modified the
*_worker.rb file to lib/workers. It could cause an error otherwise.
- In case you get this error when starting Mongel, copy the
vendor/plugins/backgroundrb directory to a temp directory and it will work
already initialized constant OPTIONS
- To set up a periodic task, set up the
Middleman object this way:
session[:job_key] = worker
MiddleMan.schedule_worker(
:class => :heartrate_post_worker,
:args => "some arg to do_work",
:job_key => :simple_schedule,
:trigger_args => {
:start => Time.now,
:end => Time.now + 10.minutes,
:repeat_interval => 15.seconds
}
)
References
- Sending emails in the background with ActionMailer and BackgrounDRB
- Example using TTL (time to live)
Posted in Ruby on Rails | 2 Comments »