Rails 3: nested resources, shallow routes, form_for

Was banging my head against this problem until I read this and the comment from “tekwiz”.


Call form_for in your views then render the _form.html.erb partial, passing the form object created by “form_for” as a local variable, i.e., when rendering children/new.html.erb form you need the parent and the child objects, however when rendering the children/edit.html.erb form (with shallow routes), you do not need the parent resource. Instead of trying to insert logic into the children/_form.html.erb partial to determine if the form is being invoked from a “new” or an “edit” action, simply invoke form_for in the associated view, then render the partial.

in children/new.html.erb :

 <h1>New Child Resource</h1>

 <%= form_for([@parent, @child]) do |f| %>

  <%= render ‘form’, :f => f %>

  <% end %>

  <%= link_to ‘Show’, child_path(@child) %>

and in children/edit.html.erb :

 <h1>Edit Child Resource</h1>

 <%= form_for(@child) do |f| %>

  <%= render ‘form’, :f => f %>

  <% end %>

  <%= link_to ‘Show’, child_path(@child) %>

OK, from the "you all probably know this" department…

Ever had a script execute just fine from your own shell, but fail to run when executed as a cron job?  Sometimes the problem is that the cron environment differs from your user environment.

One can determine the cron job environment by simply running a cron job that executes /bin/env , e.g.,

$ cat env_dump.sh


export PATH=/sbin:/bin:/usr/sbin:/usr/bin

export MAILTO=<your e-mail address here>


Then edit your crontab to execute the script:

$ crontab -e 

# set to a time a few minutes from now

# in this case, I edited the crontab at 08:43 and set the cron job to execute at 08:45 

45 08 * * * /path/to/env_dump.sh

Check your e-mail and compare and contrast against the output from $ /bin/env run from a user shell.

Capturing *nix exit status when using Expect

Help from here:


and here:


The script ./exit_fail_3.sh is a simple BASH script that just sleeps for 5 seconds then exits with a value 3.

dl-oak:~ $ expect

expect1.1> spawn ./exit_fail_3.sh

spawn ./exit_fail_3.sh


expect1.2> set result [wait]

14853 exp7 0 3

expect1.3> lindex $result 0


expect1.4> lindex $result 1


expect1.5> lindex $result 2


expect1.6> lindex $result 3



The UNIX process exit status is:

lindex $result 3

emacs linum-mode

In linum-version “0.9wza”

To add some spaces after the line number in emacs linum-mode, you can tweak this line in linum-update-window:  (concat “%” (number-to-string w) “d”)))))


(concat “%” (number-to-string w) “d  ”)))))

will add two spaces between the line number and your code.