2009-07-28 4 views
1

정상적인 동작 (색인, 표시, 새로 만들기, 편집 등)이있는 표준 사용자 컨트롤러가 있는데 '프로필'이라는 새로운 동작을 추가하려고합니다. 나는 다음과 같은 코드를 추가 : 나는 또한 작업 (응용 프로그램/뷰/사용자/profile.html.erb)에 대한 새로운 뷰를 생성새로운 동작이 작동하지 않습니다.

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

을,하지만 난 그 페이지를 보려고 할 때마다 오류가 발생합니다 :

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). 왜 이것 하나? 컨트롤러 = 사용자, : action = 프로필, : id = nil?

답변

1

당신의 routes.rb 파일에 이런 식으로 뭔가를 넣어보십시오 : 당신이 설정되지 않기 때문에

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

내가, 당신이 기본값 중 하나를 일치하지 않기 때문에 그것은이를하고있어 아마도 이유는 생각 : ID를 (ID로 동작을 감지하더라도). 귀하의 URL이 어떤 모양인지는 모르지만, http://localhost:3000/users/123124124/profile을 시도하면 노선에 새로운 행이 없어도 작동 할 수 있다고 생각합니다.

0

의도적으로 params [: id] 대신 [: user_id] 세션에서 ID를 가져 오려고합니까? 공개 프로필을 표시 할 예정입니까?

+0

프로필 페이지에서 (현재 로그인 한 사용자 용) 세션에서 ID를 가져 오는 중입니다. 쇼 페이지에서 어떤 사용자도 로그인 할 수있는 사람이 아니기 때문에 사용할 수 있기 때문에 매개 변수에서 가져 오는 동안 . – Jason

0

페이지를 처음로드 할 때 세션에 user_id가 포함되어 있습니까?

0

모든 코드를 보지 않고 말하기는 힘들지만 모델과 컨트롤러가 같은 이름을 가지고 있기 때문에 약간의 괴짜가있을 수 있습니다. 나는 다른 것을 바꾸기 전에 컨트롤러 이름 바꾸기를 시도 할 것입니다. (뷰/사용자 디렉토리의 이름도 변경하는 것을 잊지 마십시오). 어쩌면 Rails cannot find model with same name as Ruby class

롱 샷 :

또한이 다른 스택 오버플로 게시물을 참조하십시오.

0

문제를 해결하려면 routes.rb를 매개 변수로 전달해야합니다. 당신이

http://localhost:3000/profile

당신이 로그인 한 번 확인 프로필 페이지는 다음 URL을 사용 액세스 할 때

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

아래로 routes.rb에서

구성, U는 처리 세션에 저장하고 userid를 세션 변수에 저장하십시오.

행운을 빈다.