Почему в этих двух примерах один перенаправляет на правильный URL, а другой нет? - PullRequest
0 голосов
/ 15 октября 2011

У меня есть метод уничтожения в контроллере для заметок, который я вызываю со страницы пользователя, чтобы удалить заметку.В первом примере ниже ... перенаправление передает идентификатор карты заметок, в результате чего страница не найдена, в то время как второй идентификатор пользователя передается правильно при поиске страницы пользователя. Может кто-нибудь помочь мне понять, почему?

Перенаправляет на пользовательский идентификатор передачи заметки

def destroy
    @note = Notecard.find_by_id(params[:id])
    delete_note(@note)
    redirect_to user_path(@current_user)
end

Перенаправляет на пользовательский идентификатор передачи пользователя

def destroy
   @note = current_user.notecards.find_by_id(params[:id])
   delete_note(@note)
 redirect_to user_path(@current_user)
end

Обновление:

Спасибо за ответы.Код здесь: https://github.com/incorvia/plumnotes/.. Аутентификация находится в помощнике сеансов и контроллере сеансов.Что касается журнала:

С Notecard.find_by_id (params [: id])

Started DELETE "/notecards/177" for 127.0.0.1 at 2011-10-15 11:53:38 -0400
  Processing by NotecardsController#destroy as HTML
  Parameters: {"authenticity_token"=>"WctbONb/qAO+hesHZ6Yw5zU19eCPNGeILIhxnW9Pi1Y=",  "id"=>"177"}
  Notecard Load (0.3ms)  SELECT `notecards`.* FROM `notecards` WHERE `notecards`.`id` = 177 LIMIT 1
  SQL (0.8ms)  DELETE FROM `notecards` WHERE `notecards`.`id` = 177
Redirected to http://localhost:3000/users/177
Completed 302 Found in 12ms


Started GET "/users/177" for 127.0.0.1 at 2011-10-15 11:53:39 -0400
  Processing by UsersController#show as HTML
  Parameters: {"id"=>"177"}
  User Load (0.3ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 9 LIMIT 1
  User Load (0.6ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 177 LIMIT 1
Completed 404 Not Found in 14ms

ActiveRecord::RecordNotFound (Couldn't find User with id=177):
app/controllers/users_controller.rb:11:in `show'

Rendered /Users/Kevin/.rvm/gems/ruby-1.9.2-p290@notes/gems/actionpack-3.1.0/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.4ms)
Rendered /Users/Kevin/.rvm/gems/ruby-1.9.2-p290@notes/gems/actionpack-3.1.0/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.0ms)
Rendered /Users/Kevin/.rvm/gems/ruby-1.9.2-p290@notes/gems/actionpack-3.1.0/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (4.6ms)

С current_user.notecards.find_by_id (params [: id])

Started DELETE "/notecards/179" for 127.0.0.1 at 2011-10-15 11:56:18 -0400
  Processing by NotecardsController#destroy as HTML
  Parameters: {"authenticity_token"=>"WctbONb/qAO+hesHZ6Yw5zU19eCPNGeILIhxnW9Pi1Y=", "id"=>"179"}
  User Load (0.3ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 9 LIMIT 1
  Notecard Load (0.6ms)  SELECT `notecards`.* FROM `notecards` WHERE `notecards`.`user_id` = 9 AND `notecards`.`id` = 179 LIMIT 1
  SQL (0.9ms)  DELETE FROM `notecards` WHERE `notecards`.`id` = 179
Redirected to http://localhost:3000/users/9
Completed 302 Found in 95ms


Started GET "/users/9" for 127.0.0.1 at 2011-10-15 11:56:18 -0400
  Processing by UsersController#show as HTML
  Parameters: {"id"=>"9"}

Ответы [ 2 ]

1 голос
/ 15 октября 2011

Трудно догадаться, что определено для локальной переменной var @current_user и где это происходит. Если вам действительно интересно, почему, - возможно, вам пригодится больше кода.

Иногда упрощать может быть довольно интересной идеей (:

redirect_to user_path( current_user.id )
0 голосов
/ 16 октября 2011

Кажется, что @current_user фактически не определялся для контроллера @Notcard, если не был вызван метод current_user.Вот почему то current_user.notecards ... сработало. Также кажется, что с user_path (@current_user) .. если @current_user не определен, то он просто берет идентификатор из params .. который оказывается идентификатором notecard, а неидентификатор пользователя ... Решением для исправления было либо пользователь current_user.notecards .., либо добавление before_filter для контроллера, который авторизует пользователей и определяет переменную экземпляра @current_user: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...