ruby на рельсах нет маршрута соответствует действию: удалить - PullRequest
0 голосов
/ 31 января 2011

Я устанавливаю дружеские отношения на сайте RoR. Модель для него: user_id, friend_id и pending (логическое значение). Я следовал за RailsCast по дружеским отношениям по большей части, но также внес некоторые изменения в него. Что у меня есть, так это то, что когда вы заходите на страницу пользователя, вы можете нажать «Запросить дружбу», и код использует:

user_friendships_path(current_user, :friend_id => @user), :method => :post

Вызывает метод create в контроллере Friendships. Он автоматически устанавливает ожидание на true. Теперь я хочу иметь ссылку «Принять», которая будет в ожидании «ложь». Поэтому я пытаюсь настроить его как

(<%= link_to "Accept", user_friendship_path(:user_id => current_user.id, :friend_id => friendship.user.id, :pending => 'false'), :method => :put %>)

На самом деле я не хочу переходить на страницу редактирования, потому что для этого просто нужно установить логическое значение false, поэтому я хочу вызвать обновление напрямую. Но когда я запускаю эту страницу, я получаю сообщение об ошибке:

No route matches {:action=>"destroy", :controller=>"friendships", :user_id=>1, :friend_id=>2, :pending=>"false"}

Я не понимаю, почему. Я не вызываю destroy (это было бы с: method =>: delete), и на самом деле в контроллере Friendship есть метод destroy.

Ресурсы настроены так:

resources :users do
     resources :friendships
end

А пути от запуска "граблей-маршрутов":

user_friendships GET    /users/:user_id/friendships(.:format)             {:action=>"index", :controller=>"friendships"}
user_friendships POST   /users/:user_id/friendships(.:format)             {:action=>"create", :controller=>"friendships"}
new_user_friendship GET    /users/:user_id/friendships/new(.:format)         {:action=>"new", :controller=>"friendships"}
edit_user_friendship GET    /users/:user_id/friendships/:id/edit(.:format)    {:action=>"edit", :controller=>"friendships"}
user_friendship GET    /users/:user_id/friendships/:id(.:format)         {:action=>"show", :controller=>"friendships"}
user_friendship PUT    /users/:user_id/friendships/:id(.:format)         {:action=>"update", :controller=>"friendships"}
user_friendship DELETE /users/:user_id/friendships/:id(.:format)         {:action=>"destroy", :controller=>"friendships"}

Любая помощь будет принята с благодарностью. Пожалуйста, дайте мне знать, если вам требуется дополнительная информация.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 31 января 2011

Путь, который существует в соответствии с маршрутами рейка:

user_friendship PUT    /users/:user_id/friendships/:id(.:format)         {:action=>"update", :controller=>"friendships"}

Метод, который вы используете, установлен, но вы не предоставляете ': id'.

Существует два решенияв зависимости от того, что вы пытаетесь сделать:

  1. Измените метод, чтобы получить - это укажет на новое действие
  2. Добавить: id к вашему построителю URL - который укажет вамк действию обновления

Ваш код склоняется ко второму, но я думаю, что если вы хотите создать новую дружбу, первый будет лучше.

0 голосов
/ 31 января 2011

Я озадачен тем, почему помощник URL-адреса сопоставляет действие уничтожения. Однако есть более простая проблема: user_friendship_path ожидает параметры :user_id и :id, а не :friend_id.

...