Restful routing seems excessive at times - I want to simplify

I'm still trying to get used to REST concepts and forms

I have a very simple controller that updates user profile data. I have this link that takes me to the controller:

<%= link_to('Profile', :controller => "operator_profile", :action => "edit") %>

I then want to simply display the operator's data like this:

def edit   @operator = Operator.find(current_operator.id) end

and I want a form that posts to a update method in operator_profile. in my routes I have

resources :operator_profile

I feel like I'm completely locked into the 7 base methods of REST and everything else throws routing errors

I couldn't even get the update method to work.

Can this be simplified?

I'm still trying to get used to REST concepts and forms

I have a very simple controller that updates user profile data. I have this link that takes me to the controller:

<%= link_to('Profile', :controller => "operator_profile", :action => "edit") %>

I then want to simply display the operator's data like this:

def edit @operator = Operator.find(current_operator.id) end

and I want a form that posts to a update method in operator_profile. in my routes I have

resources :operator_profile

I feel like I'm completely locked into the 7 base methods of REST and everything else throws routing errors

It's just shorthand - you could create the 7 routes on their own, ie match 'operator_profiles/:id', :to => 'operator_profiles#index'

Or you can pass :only or :except to resources to say you don't want all 7. Lastly since you have a concept of current_operator, maybe resources :operator_profiles just isn't the right fit (since for excample your edit or update actions don't require an id parameter). You could try the singleton one (ie resource :operator_profile)

Fred

Update:

I realized I should also attempt to go w/ a operations_controller instead of the operator_profile_controller. So I did that and I now have in routes:

resources :operations

and in operations controller I have all 7 rest methods.

And now I'm getting this:

No route matches {:controller=>"operators", :action=>"edit"}

because of this link in application.html.erb:

<%= link_to('Profile', :controller => "operators", :action => "edit") %>

and this fails as well:

<%= link_to('Profile', :controller => "operators_profile", :action => "edit") %>

My model is operator.rb

Here's a dump of all my operator related routes:

[code]       operator_profile_index GET /operator_profile(.:format) {:action=>"index", :controller=>"operator_profile"}                              POST /operator_profile(.:format) {:action=>"create", :controller=>"operator_profile"}         new_operator_profile GET /operator_profile/new(.:format) {:action=>"new", :controller=>"operator_profile"}        edit_operator_profile GET /operator_profile/:id/edit(.:format) {:action=>"edit", :controller=>"operator_profile"}             operator_profile GET /operator_profile/:id(.:format) {:action=>"show", :controller=>"operator_profile"}                              PUT /operator_profile/:id(.:format) {:action=>"update", :controller=>"operator_profile"}                              DELETE /operator_profile/:id(.:format) {:action=>"destroy", :controller=>"operator_profile"}

                   operators GET /operators(.:format) {:action=>"index", :controller=>"operators"}                              POST /operators(.:format) {:action=>"create", :controller=>"operators"}                 new_operator GET /operators/new(.:format) {:action=>"new", :controller=>"operators"}                edit_operator GET /operators/:id/edit(.:format) {:action=>"edit", :controller=>"operators"}                     operator GET /operators/:id(.:format) {:action=>"show", :controller=>"operators"}                              PUT /operators/:id(.:format) {:action=>"update", :controller=>"operators"}                              DELETE /operators/:id(.:format) {:action=>"destroy", :controller=>"operators"} [/code]

Update:

I realized I should also attempt to go w/ a operations_controller instead of the operator_profile_controller. So I did that and I now have in routes:

resources :operations

and in operations controller I have all 7 rest methods.

And now I'm getting this:

No route matches {:controller=>"operators", :action=>"edit"}

because of this link in application.html.erb:

<%= link_to('Profile', :controller => "operators", :action => "edit")

Look at your routes and you will see that edit requires an id (so it knows which one to edit). You have not provided the id in the link.

%>

and this fails as well:

<%= link_to('Profile', :controller => "operators_profile", :action => "edit") %>

Same problem here I imagine.

Colin

Your issue is that the restful edit/update routes requires an id (which object to edit/update) and you're not providing one, which is why I suggested you look at singleton resources.

Fred

Just a couple of points to add - might be typos in the post, or may be relevant to your controllers....

Update:

I realized I should also attempt to go w/ a operations_controller instead of the operator_profile_controller. So I did that and I now have in routes:

resources :operations

** operations **

and in operations controller I have all 7 rest methods.

And now I'm getting this:

No route matches {:controller=>"operators", :action=>"edit"}

** operators **

because of this link in application.html.erb:

<%= link_to('Profile', :controller => "operators", :action => "edit") %>

** operators **

and this fails as well:

<%= link_to('Profile', :controller => "operators_profile", :action => "edit") %>

My model is operator.rb

Here's a dump of all my operator related routes:

Is your controller operator[s], or operations?

For this route

edit_operator_profile GET /operator_profile/:id/edit(.:format)                   {:action=>"edit", :controller=>"operator_profile"}

Below is wrong

<%=link_to('Profile',:controller => "operators_profile",:action =>"edit")%>

Correct will be

<%=link_to('Profile',:controller => "operators_profile",:action =>"edit", :id => @your_operator_profile)%>

Or even shorter

<%=link_to('Profile',edit_operator_profile(@your_operator_profile))%>

Restful resources are really easy if you look carefully at output of   rake routes