Вы используете JQuery?
$("#upload").change(function() {
..
});
- это один путь, а
$("#upload").bind("change", function() {
..
});
- это другой.
JQuery Doc.
Обновление:
Вы можете написать это как:
<%= f.file_field :image, :id => "upload", :onchange => "readURL(this)" %>
Это даст вам HTML что-то вроде:
<input type="file" onchange="readURL(this); return false;" name="post[image]" id="upload">