Rails вызывает метод destroy из другого контроллера - PullRequest
2 голосов
/ 11 ноября 2011

У меня есть friendships_controller, но я бы хотел назвать его действия create и destroy изнутри users_controller.На самом деле, как у меня все настроено, метод create работает нормально, а destroy - нет.

users / index

<%= button_to "+ Add Friend", :controller => "friendships", :action => 'create', :method => "post", :id => user.id %>
<%= button_to "- Unfriend", {:controller => "friendships", :action => 'destroy'}, :confirm => "Are you sure you want to unfriend #{user.username}?", :method => :delete, :id => user.id %>

Если я нажму кнопку «Отменить», яполучите исключение для следующих рельсов:

ActiveRecord::RecordNotFound in FriendshipsController#destroy
Couldn't find User with ID=destroy

Это действие destroy внутри friendships_controller:

  def destroy
    @accepting_user = User.find(params[:id])
    @friendship = Friendship.find_by_accepting_user_id_and_requesting_user_id(@accepting_user.id, current_user.id)
    @friendship.destroy
    flash[:notice] = "You unfriended #{@friendship.accepting_user.username}."
    redirect_to(:back)
  end

У кого-нибудь есть мысли по этому поводу?Спасибо.

ОБНОВЛЕНИЕ

Маршруты дружбы:

rake routes | grep friendship
           friendships_index GET    /friendships/index(.:format)                                      {:controller=>"friendships", :action=>"index"}
                 friendships GET    /friendships(.:format)                                            {:controller=>"friendships", :action=>"index"}
                             POST   /friendships(.:format)                                            {:controller=>"friendships", :action=>"create"}
              new_friendship GET    /friendships/new(.:format)                                        {:controller=>"friendships", :action=>"new"}
             edit_friendship GET    /friendships/:id/edit(.:format)                                   {:controller=>"friendships", :action=>"edit"}
                  friendship GET    /friendships/:id(.:format)                                        {:controller=>"friendships", :action=>"show"}
                             PUT    /friendships/:id(.:format)                                        {:controller=>"friendships", :action=>"update"}
                             DELETE /friendships/:id(.:format)                                        {:controller=>"friendships", :action=>"destroy"}

1 Ответ

6 голосов
/ 11 ноября 2011

Все заработало, просто нужно было переместиться туда, где я проезжал в :id

Конечный результат выглядит так:

<%= button_to "- Unfriend", {:controller => "friendships", :action => 'destroy', :id => user.id}, :confirm => "Are you sure you want to unfriend #{user.username}?", :method => :delete %>
...