# "Only get, put, and delete requests are allowed."?

**URL:** <https://www.ruby-forum.com/t/only-get-put-and-delete-requests-are-allowed/122787>\
**Category:** Rails\
**Created:** [December 12, 2007, 4:56am UTC](https://www.ruby-forum.com/t/only-get-put-and-delete-requests-are-allowed/122787 "2007-12-12T04:56:36Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![johnk](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/59ef9b/32.png) [@johnk](https://www.ruby-forum.com/u/johnk)\
**Post date:** [December 12, 2007, 4:56am UTC](https://www.ruby-forum.com/t/only-get-put-and-delete-requests-are-allowed/122787/1 "2007-12-12T04:56:36Z")

</div>

I am getting this error and I can’t for the life of me figure out why  
this  
is happening. Even google is not spitting out anything useful.  
This is what I have.

route:

map.resources :users, :member =\> { :edit\_email =\> :get, :edit\_password  
=\>  
:get } do |user|  
user.resources :pictures  
end

pictures/new.html.erb

\<% form\_for(:picture, user\_pictures\_path(params[:user\_id]), :html =\> {  
:multipart =\> true }) do |f| -%\>  
\<%= file\_field :picture, :picture %\>  
\<% end -%\>

pictures\_controller.rb

def create  
@picture = @user.pictures.build params[:picture]  
@picture.file\_name = @user.nickname +  
Time.now.strftime(“%Y%m%d%H%M%S”)  
if (@user.pictures \<\< @picture.save)  
redirect\_to user\_url(@user)  
else  
render :action =\> :new  
end  
end

HELP 🙂

–  
John K.  
removed\_email\_address@domain.invalid

Blog: [http://www.kopanas.com](http://www.kopanas.com)  
Conference: [http://www.cusec.net](http://www.cusec.net)  
Twits: [http://www.twitter.com/kopanas](http://www.twitter.com/kopanas)

---

<div class="post-metadata">

**Author:** ![johnk](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/59ef9b/32.png) [@johnk](https://www.ruby-forum.com/u/johnk)\
**Post date:** [December 12, 2007, 6:31pm UTC](https://www.ruby-forum.com/t/only-get-put-and-delete-requests-are-allowed/122787/2 "2007-12-12T18:31:18Z")

</div>

Just some standard debugging advice: start taking stuff out until it  
works. What happens if the form doesn’t contain upload fields? What if  
create is empty?

///ark

---

<div class="post-metadata">

**Author:** ![johnk](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/59ef9b/32.png) [@johnk](https://www.ruby-forum.com/u/johnk)\
**Post date:** [December 12, 2007, 6:39pm UTC](https://www.ruby-forum.com/t/only-get-put-and-delete-requests-are-allowed/122787/3 "2007-12-12T18:39:39Z")

</div>

I did that… I have the following and I am still having the same  
problem:

new.html.erb

\<% form\_for(:picture, user\_pictures\_path(params[:user\_id]), :html =\> {  
:method =\> :post }) do |f| -%\>

\<%= submit\_tag 'Upload' %\>

\<% end -%\>

pictures\_controller.rb

def create  
render :text =\> “hello”  
end

routes.rb

map.resources :users, :member =\> { :edit\_email =\> :get, :edit\_password  
=\>  
:get } do |user|  
user.resources :pictures  
end

I have a funny feeling this has something to do with the fact this is a  
nested resource. I have found other people with the same problem and  
they  
were using nested resources as well but I could never find their  
solution  
:-).

Any feedback?

On Dec 12, 2007 12:30 PM, Mark W. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Just some standard debugging advice: start taking stuff out until it  
> works. What happens if the form doesn’t contain upload fields? What if  
> create is empty?
> 
> ///ark
> 
> >

–  
John K.  
removed\_email\_address@domain.invalid

Blog: [http://www.kopanas.com](http://www.kopanas.com)  
Conference: [http://www.cusec.net](http://www.cusec.net)  
Twits: [http://www.twitter.com/kopanas](http://www.twitter.com/kopanas)

---

<div class="post-metadata">

**Author:** ![johnk](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/59ef9b/32.png) [@johnk](https://www.ruby-forum.com/u/johnk)\
**Post date:** [December 12, 2007, 6:54pm UTC](https://www.ruby-forum.com/t/only-get-put-and-delete-requests-are-allowed/122787/4 "2007-12-12T18:54:43Z")

</div>

I think I figured it out:  
rake routes | grep picture

```
                 user_pictures GET /users/:user_id/pictures
   {:action=>"index", :controller=>"pictures"}
       formatted_user_pictures GET 

```

/users/:user\_id/pictures.:format  
{:action=\>“index”, :controller=\>“pictures”}  
POST /users/:user\_id/pictures  
{:action=\>“create”, :controller=\>“pictures”}  
POST  
/users/:user\_id/pictures.:format  
{:action=\>“create”, :controller=\>“pictures”}  
new\_user\_picture GET /users/:user\_id/pictures/new  
{:action=\>“new”, :controller=\>“pictures”}  
formatted\_new\_user\_picture GET  
/users/:user\_id/pictures/new.:format {:action=\>“new”,  
:controller=\>“pictures”}  
edit\_user\_picture GET  
/users/:user\_id/pictures/:id/edit  
{:action=\>“edit”, :controller=\>“pictures”}  
formatted\_edit\_user\_picture GET  
/users/:user\_id/pictures/:id/edit.:format {:action=\>“edit”,  
:controller=\>“pictures”}  
user\_picture GET /users/:user\_id/pictures/:id  
{:action=\>“show”, :controller=\>“pictures”}  
formatted\_user\_picture GET  
/users/:user\_id/pictures/:id.:format {:action=\>“show”,  
:controller=\>“pictures”}  
PUT /users/:user\_id/pictures/:id  
{:action=\>“update”, :controller=\>“pictures”}  
PUT  
/users/:user\_id/pictures/:id.:format {:action=\>“update”,  
:controller=\>“pictures”}  
DELETE /users/:user\_id/pictures/:id  
{:action=\>“destroy”, :controller=\>“pictures”}  
DELETE  
/users/:user\_id/pictures/:id.:format {:action=\>“destroy”,  
:controller=\>“pictures”}

POST AND DELETE do not have methods for creating the URL… you have to  
just  
pass the :url with an :action and :controller. Does anyone know why  
this is  
the case?

On Dec 12, 2007 12:37 PM, John K. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> ```
> user.resources :pictures
> 
> ```
> 
> > 
> 
> –  
> John K.  
> removed\_email\_address@domain.invalid
> 
> Blog: [http://www.kopanas.com](http://www.kopanas.com)  
> Conference: [http://www.cusec.net](http://www.cusec.net)  
> Twits: [http://www.twitter.com/kopanas](http://www.twitter.com/kopanas)

–  
John K.  
removed\_email\_address@domain.invalid

Blog: [http://www.kopanas.com](http://www.kopanas.com)  
Conference: [http://www.cusec.net](http://www.cusec.net)  
Twits: [http://www.twitter.com/kopanas](http://www.twitter.com/kopanas)

---

<div class="post-metadata">

**Author:** ![johnk](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/59ef9b/32.png) [@johnk](https://www.ruby-forum.com/u/johnk)\
**Post date:** [December 12, 2007, 7:27pm UTC](https://www.ruby-forum.com/t/only-get-put-and-delete-requests-are-allowed/122787/5 "2007-12-12T19:27:15Z")

</div>

I wish that was it but it is not the case. I am getting the same error  
and  
I do not think it matters if I set method or not because even if I do  
not  
set the method it is by default set as a post.  
Any other suggestions please? ☹

On Dec 12, 2007 8:42 AM, Jason R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > ```
> > user.resources :pictures
> > 
> > ```
> 
> >

–  
John K.  
removed\_email\_address@domain.invalid

Blog: [http://www.kopanas.com](http://www.kopanas.com)  
Conference: [http://www.cusec.net](http://www.cusec.net)  
Twits: [http://www.twitter.com/kopanas](http://www.twitter.com/kopanas)

---

<div class="post-metadata">

**Author:** ![johnk](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/59ef9b/32.png) [@johnk](https://www.ruby-forum.com/u/johnk)\
**Post date:** [August 19, 2011, 12:16pm UTC](https://www.ruby-forum.com/t/only-get-put-and-delete-requests-are-allowed/122787/6 "2011-08-19T12:16:51Z")

</div>

in your routes.rb add :collection =\> {:new=\>:any}

map.resources :users, :member =\> { :edit\_email =\> :get, :edit\_password  
=\>  
:get } do |user|  
user.resources :pictures,:collection =\> {:new=\>:any}  
end

It worked for me

–  
removed\_email\_address@domain.invalid

---

<div class="post-metadata">

**Author:** ![johnk](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/59ef9b/32.png) [@johnk](https://www.ruby-forum.com/u/johnk)\
**Post date:** [December 12, 2007, 7:22pm UTC](https://www.ruby-forum.com/t/only-get-put-and-delete-requests-are-allowed/122787/7 "2007-12-12T19:22:57Z")

</div>

On Dec 11, 2007 10:04 PM, John K. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> ```
> @picture = @user.pictures.build params[:picture]
> 
> ```
> 
> HELP 🙂  
> You need to specify the method used by the form tag:  
> \<% form\_for(:picture, user\_pictures\_path(params[:user\_id]), _:method =\>  
> :post_, :html =\> { :multipart =\> true }) do |f| -%\>  
> \<%= file\_field :picture, :picture %\>  
> \<% end -%\>

Jason
