2009-07-28 15 views
1

У меня есть стандартный пользовательский контроллер с нормальным набором действий (индекс, шоу, новый, редактировать и т. Д.), И я пытаюсь добавить новое действие с именем «профиль». Я добавил следующий код:Новое действие не работает

def profile 
    @user = User.find(session[:user_id]) 
end 

Я также создал новый вид для действия (приложение/просмотров/пользователей/profile.html.erb), но всякий раз, когда я пытаюсь просмотреть эту страницу, я получаю сообщение об ошибке:

ActiveRecord::RecordNotFound in UsersController#show 
Couldn't find User with ID=profile 
...

Видимо, это поражает действие шоу. Я предполагаю, что это означает, что мне нужно добавить что-то к моим маршрутам, чтобы выполнить эту работу, но я не знаю, что. До сих пор я просто есть два маршрута по умолчанию и map.root линию, которую я незакомментированной:

map.root :controller => "home" 
map.connect ':controller/:action/:id' 
map.connect ':controller/:action/:id.:format' 

Так на самом деле у меня есть два вопроса:

  1. Что я должен сделать для того, чтобы дать возможность моим новые действия?
  2. Почему существующие маршруты не покрывают эту ситуацию? Другие URL-адреса, состоящие только из контроллера и действия, работают очень хорошо (например, http://localhost:3000/users/new). Почему не этот? Не следует ли это просто оценить: controller = users,: action = profile,: id = nil?

ответ

1

Попробуйте положить что-то подобное в вашем routes.rb файле:

map.user_profile '/users/:id/profile', :controller => "users", :action => 'profile', :conditions => {:method => :get} 

Я думаю, что, возможно, причина, что он делает это потому, что вы не соответствуют либо настройки по умолчанию, потому что вы не настройки: идентификатор (даже если он определяет ваше действие как id). Я не знаю, как выглядит ваш URL-адрес, но я чувствую, что если вы пробовали http://localhost:3000/users/123124124/profile, он МОЖЕТ работать, даже без новой строки в маршрутах.

0

Вы намеренно пытаетесь получить идентификатор из сеанса [: user_id] вместо params [: id]? Должен ли он показывать общедоступный профиль?

+0

На странице профиля Я получаю идентификатор от сеанса (он для текущего пользователя), а на странице просмотра он получает его из параметров, так как показ может быть использован для любого пользователя, а не только того, кто вошел в систему , – Jason

0

Вы уверены, что сессия содержит user_id при первой загрузке страницы?

0

Трудно сказать, не видя всего кода, но я предполагаю, что может быть какая-то странность, потому что ваша модель и контроллер имеют одно и то же имя. Я попробую переименовать контроллер, прежде чем изменять что-либо еще (не забудьте также изменить имя каталога views/users).

Смотрите также этот другой переполнения стека пост: Rails cannot find model with same name as Ruby class

Длинный выстрел возможно.

0

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

настроить в routes.rb ниже

map.profile '/profile/:id',:controller=>'users',:action=>'profile' 

, когда вы хотите получить доступ к вашей странице профиля использовать его по следующему адресу

http://localhost:3000/profile

Убедитесь, как только вы входите, у обрабатывать сеанс и сохранить идентификатор пользователя в переменной сеанса.

Удачи вам!

Смежные вопросы