2010-02-09 2 views
0

인보이스 리소스가 있고 각 인보이스에 InvoiceLine 리소스가 중첩되어있어 매우 일반적인 중첩 리소스 패턴이 있다고 가정 해 보겠습니다.Rails에서 중첩 된 RESTful 경로 : 뷰를 어떻게 구성해야합니까?

이제 개별 인보이스 행을 표시하는보기를 인보이스의 행으로 배치해야합니까? 인보이스 라인은 invoices/_line.html.erb에 속한 부분으로 렌더링해야합니까? 아니면 invoices_lines/show.html.erb 아래에 본격적인보기가 있어야합니까? 일반적으로 전자가 확실한 선택이지만 AJAX 기능을 추가하면 (Invoice Show보기에서 줄을 추가하고 편집 할 때) 상황이 복잡해집니다.

저는 정기적으로이 문제에 정말로 어려움을 겪고 있습니다. 그리고 나는 그것을 다루는 올바른 방법이 확실하지 않습니다.

map.resoures :invoices do |invoice| 
    invoice.resources :lines, :controller => :invoice_lines 
end 

관점의 표준 폴더 구조는 다음과 같습니다 :

app/ 
    views/ 
    invoices/ 
    invoice_lines/ 

이를위한 편안하고 경로는 일반적으로 다음과 같이 보일 것입니다 : 여기

내가 생각하고 무엇을 이제, 모든 라인을 포함한 전체 송장을 렌더링 할 때, 내 성향은 각 라인을 _line.html.erb 부분적으로 invoices/ 아래로 만드는 것입니다. 그러나 라인 추가 및 편집을위한 AJAX 기능을 추가하려면 PUT 및 POST가 송장 라인 컨트롤러로 라우팅되므로 show.html.erb보기에서 invoice_lines.erb 아래의 라인 행을 렌더링하지 않아야합니까?

그래서 내 의견은 다음과 같아야합니다

app/ 
    views/ 
    invoices/ 
     index.html.erb 
     show.html.erb 
     _line.html.erb 
    invoice_lines/ 

또는 같은

: 나는 InvoiceLinesController는 invoices/_line.html.erb의 부분을 사용하여 AJAX 요청에 대한 응답을 렌더링 가진 사이에 붙어있어

app/ 
    views/ 
    invoices/ 
     index.html.erb 
     show.html.erb 
    invoice_lines/ 
     index.html.erb 
     show.html.erb 

, 또는 라인 행 템플릿 코드를 invoice_lines/show.html.erb에 넣고 invoices/show.html.erb을 개별 라인을 구성 요소 또는 InvoiceLinesController # index에 대한 AJAX 요청으로 렌더링 할 수 있습니다.

어느 쪽도 그렇지 않습니다. 여기에 모범 사례에 대한 제안이 있습니까?

인보이스 컨텍스트에서 인보이스의 컨텍스트로 렌더링 할 때 인보이스 라인 컨트롤러에 자체 뷰 세트가 있어야하지만 레일스에는 "컨텍스트 별"뷰에 대한 확실한 규정이없는 것처럼 느껴집니다.

+0

그런 귀청이 들지 않는 침묵은 기대하지 않았다. 충분히 명확하지 않습니까? 아니면 다른 모든 사람들도이 문제에 곤란을 겪고 있습니까? –

답변

2

부분적으로 _line.html.erb를 invoice_lines 폴더에 넣은 다음 invoices_lines/show.html.erb 템플릿 invoices/show.html.erb에서이 부분을 사용하십시오.

이렇게하면 비슷한 상황에서 그랬습니다.

  • 이렇게하면 모든 인보이스 특정보기 코드는 인보이스 폴더에 있고 모든 invoice_line 코드는 invoice_line 폴더에 있습니다.
  • DRY : invoice_line 컨트롤러에 Ajax 호출을 사용하거나 invoice/show.html.erb를 표시하여 전체를 렌더링 할 수 있습니다. invoice_items는 invoice_lines/_line.html에서 동일한 부분을 통해 두 번 렌더링됩니다.erb

귀하의 질문에 대한 답변입니다. 나는 레일스에서 ​​아직 경험이 없기 때문에 이것이 "우수 사례"인지는 알 수 없다.

+0

이것은 내가하는 일이기도합니다. –

관련 문제