2013-08-25 1 views
1

저는 사용자가 프로젝트를 만들고 프로젝트를 포스트에 추가 할 수있는 레일 4 앱을 만들고 있습니다. 게시물은 텍스트와 선택적 캡션이있는 이미지로 구성되므로 이미지와 캡션을 저장하는 사진 모델이 있습니다. CURRENT_USER에 의해레일즈 - user_id로 모델에 직접 액세스하지 않고 중첩 된 리소스에 current_user를 사용하십시오.

resources :projects do 
    resources :posts 
end 
resources :posts do 
    resources :photos 
end 

인증 중은 게시물을 프로젝트에 대한 작동 및 게시물 직접 관련이 있기 때문에 :

사용자는 프로젝트가 많은 게시물과 게시물은 다음과 같이 많은 사진

내 경로

을 가지고 있고, 많은 프로젝트가 user_id가 저장된 프로젝트. 사진은 내가 게시물 컨트롤러에서와 그래서 나는이 작업을 수행 할 수 없습니다 게시물로 직접 연결 : 비슷한 방식으로 사진에 CURRENT_USER를 사용하는 방법이 있나요

def set_project 
    @project = current_user.projects.find(params[:project_id]) 
end 

프로젝트의 저자가 할 수 있도록 사진을 자신의 게시물에 추가, 편집, 삭제 하시겠습니까?

현재 내 사진 컨트롤러에서 나는 통해 관련 게시물을 얻을 :

def set_post 
    @post = Post.find(params[:post_id]) 
end 

하지만 분명 더 CURRENT_USER 권한이 없습니다. 게시물이 속한 프로젝트의 ID를 찾은 다음 사진 컨트롤러 내부에서 current_user를 사용하는 방법이 필요합니다.

+0

'current_user.projects.find (params [: project_id] .posts.find (params [: post_id]). photos'가 필요한가요? 또는 모델 중 하나에서 범위를 정의 할 수 있습니다 : http : // guides .rubyonrails.org/active_record_querying.html # scope – Mindbreaker

+0

필자는 필자가 필요로하는 것 같아요. @post = current_user.projects.find (params [: project_id] .posts.find (params [: post_id]))')'작동하지 않는다. –

답변

0

엄지 손가락의 규칙은 중첩 된 자원의 두 개 이상의 수준 그렇지 않으면 당신은 당신의 사건을 위해

(내 경험에서 아마 잊지 소스를 ) 그들을 돌봐 너무 바빠서 수 있습니다을하지 않는 것입니다 나는

resources project do 
    resources posts 
end 

resources photo 

그런 다음 모델 (이 사용자 아래에 중첩 또는 설정). 사진에 중첩 된 자원을 설정하지 않는 것이 좋습니다

class User < ActiveRecord::Base 
    has_many :photos 
    has_many :projects 
end 

티 현실 세계에서도 의미가 있습니다. 게시물은 프로젝트 아래에 있습니다. 그러나 사진은 어떻습니까? 한 게시물에 레이아웃 아이디어를 표시 할 사진이있는 경우 나중에이 사진을 다시 게시 할 수 있습니까? 고객이 전후 비교하기를 원한다고 가정 해보십시오. 확실히해야합니다. 따라서 사진은 합리적인 논리로 게시물과 더 잘 독립적입니다.

그리고 지금 모든 질문에 의문의 여지가 없습니다.

추가 : (연결되지 않음)과 관련된 세 가지 방법이 있습니다 제 생각에는 코멘트 의 질문에 대답하기 위해 사진과 함께 게시 : 포스트 내용의

  1. 삽입 사진 ID를이 가장 선호입니다 ,이 게시물 작가는 사진의 위치를 ​​제어 할 수 있습니다. 연결은 필요하지 않습니다.

  2. 다 대다 관계. 조금 복잡해.

  3. 게시물에 직렬화 된 열을 사용하여 언급 한 사진 ID 배열을 저장하십시오.

다른 방법은 게시 한 has_many 사진입니다.이 경우 사진의 게시물 ID가 FIXED가되어 다른 게시물에서 전화를 걸 수 없습니다. 결과가 만족 스럽다면 그렇게 할 수 있습니다. 그러나 이런 식으로조차도 중첩 된 리소스가 필요하지 않습니다.

+0

앱의 목적은 무언가를 만들어내는 동안 사람들이 진행 상황을 공유하여 그들이하는 모든 게시물이 새로운 진행 상황이고 사진이 해당 게시물과 연관되어야한다는 것이다. 프로젝트는 일련의 게시물이다. 사진으로 진행 상황을 문서화 할 수 있습니다. 내가 말할 수있는 한, has_many belongs_to 관계를 통해 사진을 직접 게시물과 연관시켜야한다는 것을 의미합니까? –

+0

@AidanZealley, 앱의 기본을 이해합니다. 연결할 필요가 없습니다. 내 의견으로는 사진이 담긴 게시물을 먹었습니다. 게시물에 사진 ID를 쓸 수 있으며 작업이 완료되었습니다. –

+0

죄송합니다. 동일한 파장을 가지고 있는지 잘 모르겠습니다./ 앱에 게시물이 표시되면 해당 게시물과 연결된 사진을 찾아야하므로 사진과 게시물 사이에 관계가 있어야합니다. –

관련 문제