Hi all,
I’m trying to do a file upload. I have followed the examples in Agile
Web D. with Rails, and Rails Cookbook, and I can’t get it to
work!! The following code is from the Rails Cookbook. I have two
tables: Items & Photos. It’s supposed to save Name and Description
into the Items table, and then grab the photo information and put it
in the Photo table. The Item information is saving, but I’m blowing
up in the Photo Model. It doesn’t recognize the field names for the
Photo table and also doesn’t recognize the “read” attribute for the
image. Any idea what I’m missing?? As always, any and all help is
greatly appreciated!!! Thanks! ~Ali
ITEMS CONTROLLER
def new
end
def create
@item = Item.new(params[:item])
# I don't understand this part -- how can it ever get past here???
I tried commenting it out, but still won’t work.
if @item.save
flash[:error] = ‘Problem Uploading’
redirect_to :action => ‘new’
return
end
@photo = Photo.new(params[:photo])
@photo.item_id = @item.id
if @photo.save
flash[:notice] = 'Item was successfully created.'
redirect_to :action => 'list'
else
flash[:error] = 'There was a problem.'
render :action => 'new'
end
end
ITEMS MODEL
class Item < ActiveRecord::Base
has_many :photos
end
PHOTOS MODEL
class Photo < ActiveRecord::Base
belongs_to :item, :foreign_key => “item_id”
def photo=(image_field)
self.name = base_part_of(image_field.original_filename)
self.content_type = image_field.content_type.chomp
self.data = image_field.read
end
def base_part_of(file_name)
name = File.basename(file_name)
name.gsub(/[^\w._-]/, ‘’)
end
end
ITEM/_FORM
Name
<%= text_field 'item', 'name' %>
Description
<%= text_field 'item', 'description' %>
Photo
<%= file_field('photo', 'photo') %>
ITEM/NEW
New Item
<%= start_form_tag :action => ‘create’, :id => @item, :multipart =>
true %>
<%= render :partial => ‘form’ %>
<%= submit_tag “Create” %>
<%= end_form_tag %>