# Uploading Images

**URL:** <https://www.ruby-forum.com/t/uploading-images/88704>\
**Category:** Rails\
**Created:** [March 13, 2007, 5:54pm UTC](https://www.ruby-forum.com/t/uploading-images/88704 "2007-03-13T17:54:01Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![ali](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/8c91f0/32.png) [@ali](https://www.ruby-forum.com/u/ali)\
**Post date:** [March 13, 2007, 5:54pm UTC](https://www.ruby-forum.com/t/uploading-images/88704/1 "2007-03-13T17:54:01Z")

</div>

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

\<%= flash[:error] %\>

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 %\>

---

<div class="post-metadata">

**Author:** ![ali](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/8c91f0/32.png) [@ali](https://www.ruby-forum.com/u/ali)\
**Post date:** [March 15, 2007, 5:18pm UTC](https://www.ruby-forum.com/t/uploading-images/88704/2 "2007-03-15T17:18:54Z")

</div>

Hi again,  
No one has responded to my post and I’m wondering if I worded it in a  
confusing way? I really need some help with this. I have been  
scouring books and the web to no avail. If further clarification is  
needed, please ask! I would really appreciate any suggestions!!

Thanks again!!  
~Ali

---

<div class="post-metadata">

**Author:** ![ali](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/8c91f0/32.png) [@ali](https://www.ruby-forum.com/u/ali)\
**Post date:** [March 15, 2007, 6:59pm UTC](https://www.ruby-forum.com/t/uploading-images/88704/3 "2007-03-15T18:59:24Z")

</div>

Ali wrote:

> Hi again,  
> No one has responded to my post and I’m wondering if I worded it in a  
> confusing way? I really need some help with this. I have been  
> scouring books and the web to no avail. If further clarification is  
> needed, please ask! I would really appreciate any suggestions!!
> 
> Thanks again!!  
> ~Ali

What does your HTML form tag look like? I think your form tag is funky  
since :multipart =\> true is being considered part of the url. If so  
your form tag would look like:

But you need it to be

You do that with form tag like this, so that the :multipart key is not  
part of the url hash:

\<%= form\_tag({:action =\> ‘create’, :id =\> @item}, {:multipart =\>  
true}) %\>

This way the multipart is passed in as a second hash rather than tacked  
onto the first.

---

<div class="post-metadata">

**Author:** ![ali](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/8c91f0/32.png) [@ali](https://www.ruby-forum.com/u/ali)\
**Post date:** [March 15, 2007, 7:37pm UTC](https://www.ruby-forum.com/t/uploading-images/88704/4 "2007-03-15T19:37:11Z")

</div>

On Mar 13, 11:52 am, “Ali” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> 

Yeah, this is a problem. Look at what you have here…

“If the item is successfully saved then  
flash error  
redirect to new  
stop processing”

While this won’t prevent your item from being saved, it is causing the  
controller to stop processing before the photo statements are called.

Try ‘unless @item.save’

I’m also not sure that the photo uploading part of your photo model  
will ever get called, since this form is in the /user application…  
Uploads are something I struggled with myself, so I’m not going to say  
much more about that. In my application the form only handles  
creating an upload, not an item _and_ and upload. (There is a  
seperate form for creating the item.)

Good luck!

---

<div class="post-metadata">

**Author:** ![ali](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/8c91f0/32.png) [@ali](https://www.ruby-forum.com/u/ali)\
**Post date:** [March 16, 2007, 12:35am UTC](https://www.ruby-forum.com/t/uploading-images/88704/5 "2007-03-16T00:35:00Z")

</div>

It’s working!! Thank you so much!! I love this forum - I’d be lost  
without it!!
