2012-08-09 2 views
4

레일을 배우기 시작했고 물론 개인 블로그 (예 : 라이브 저널)로 서비스를 작성하기 시작했습니다. 나는 비계와 사용자 모델 (Devise 덕택에) 게시물을 가지고있다. 이제 특정 사용자의 모든 게시물을/username/posts와 같은 URL로 표시하려하지만 실제로이 방법을 이해하는 방법을 이해할 수 없습니다. 이미 루트 레일에 특정 사용자의 블로그 글 표시

resources :users do 
    resources :posts 
end 

에 중첩 된 자원을 만들어

has_many :posts 

belongs_to :user 

나는 사용자에 대한 컨트롤러를 만들어야 여부와 사용자 및 사후 모델을 연결? 이것에 대한 적절한 방법이 있습니까?

P. 답변 해주셔서 감사합니다. 레일을 연구하려고 시도했지만 거의 모든 튜토리얼은 스캐 폴딩으로 끝났으며 거의 ​​도움이되지 않습니다.

편집 1 : "일치"아이디어 덕분에 문제의 절반을 해결했습니다. 다른 (미해결) 절반

편집이 특정 사용자가 작성한 게시물 선택하는 것입니다 :

@user = User.where(:username => params[:username]) 
@posts = @user.posts 

추가가 컨트롤러를,하지만 난 게시물 컨트롤러에서 "정의되지 않은 메서드`포스트 '"오류가 있습니다.

답변

3

where을 사용하면 단일 개체가 아닌 쿼리에서 개체 배열을 가져옵니다.
그리고이 때문에 @user 변수에 posts 메서드가 없습니다.

@user = User.find_by_username(params[:username]) 

하나만 user는 쿼리가이 방법을 당신은 오류없이 .posts relashionship를 사용할 수 있습니다
어쩌면 당신은 하나의 user를 검색하기 위해이 같은 것으로 변경해야합니다.

+0

와우, 고마워요!너는 쓸모없는 수색의 또 다른 날로부터 정말로 나를 구했다! – Nausik

+0

언제나 기꺼이 도와 드리겠습니다. – MurifoX

1

resources :users do 
    resources :posts 
end 

을 사용하면 같은 URL을 가지고 끝날 것 '/ 사용자/1/글'

당신이

def to_param 
    self.username 
end 
를 작성해야 ID의 경우 사용자 이름을 가지고 먼저 사용자 모델의

당신이되고 당신의 URL을하지 않으려면

가 아니면/사용자/: ID/게시물에는 게시물 컨트롤러와 show 액션에 당신을 데려 갈 것이다

match ':username/posts' ,'posts#show' 

경기

를 사용하여 경로 URL을 만들 수 있습니다.

+1

또한 컨트롤러에 대해 당신은 건조기 후 모든 행동에 당신이 대답을 –

+0

덕분에 그 일을 그래서이 모든 행동에 액세스 할 수 있도록 사용자 이름에서 사용자를 얻기 위해가 PostsController에 before_filter을 수행해야합니다! "일치"아이디어가 실제로 도움이되었지만 특정 사용자의 게시물 만 선택하는 방법을 이해할 수 없었습니다 – Nausik

관련 문제