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?
On May 5, 6:23am, Clem R. [email protected] wrote:
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:
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"}
On May 5, 1:20pm, Clem R. [email protected] wrote:
And now I’m getting this:
<%= link_to(‘Profile’, :controller => “operators_profile”, :action =>
“edit”) %>
My model is operator.rb
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
On 5 May 2011 13:20, Clem R. [email protected] wrote:
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
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
Just a couple of points to add - might be typos in the post, or may be
relevant to your controllers…
On May 5, 1:20pm, Clem R. [email protected] wrote:
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?