Reputation: 11095
I'm trying to destroy a link from a User Show view.
So from /users/1
,
I want to access destroy
action in teacher_student_links
controller.
The first attempt:
<%= link_to 'destroy', :controller => "teacher_student_links", :action => "destroy", :id => @user.id %>
This fails because it routes to "show" action in the specified controller. So first question: why does it point to the "show" action instead of "destroy?" I tried to enclose the above with parenthesis, and got a meaningless error as well.
The second attempt:
in config/routes.rb
match '/bye_teacher' => 'teacher_student_links#destroy'
view
<%= link_to 'destroy', '/bye_teacher', :user_id => @user.id %>
also tried,
<%= link_to 'destroy', '/bye_teacher', :user_id => @user %>
Both lines correctly direct to the specified controller and action, but the parameter is not passed in. (can't find the user without an ID error)
second question: am I passing in the variable in a wrong way in this case?
It's little embarrassing to ask these two questions, but I wanted to know the reasons behind these problems.
UPDATE:
<%= link_to 'destroy', teacher_student_links_path(:user_id => @user), :method => :delete %>
gives
No route matches [DELETE] "/teacher_student_links"
<%= link_to 'destroy', teacher_student_links_path(@user), :method => :delete %>
gives
No route matches [DELETE] "/teacher_student_links.1"
... so I ran
rake routes
and I got
DELETE /teacher_student_links/:id(.:format) teacher_student_links#destroy
Upvotes: 0
Views: 67
Reputation: 671
You are giving wrong path
<%= link_to 'destroy', teacher_student_links_path(@user), :method => :delete %>
should be like this:
<%= link_to 'destroy', teacher_student_link_path(@user), :method => :delete %>
When you run 'rake routes' then 1st column will tell you the path
Upvotes: 0
Reputation: 21784
match "/bye_teacher/:id" => "teacher_student_links#destroy"
<%= link_to 'destroy', teacher_student_links_path(:id),
:confirm => 'Are you sure you want to destroy this teacher?', :method => :delete %>
This should also work in the view:
<%= link_to 'Destroy', :action => 'destroy', :id => @user.id, :method => :delete %>
Rails Routing from the Outside In
Upvotes: 1