Rails에서 전체 애플리케이션이 공유하는 부분을 어디에 넣을까요?
둘 이상의 모델에서 공유하는 부분 파일을 배치하려면 어디로 가야합니까? crop.html.erb
한 모델에 사용되는 페이지 가 Photo
있습니다. 이제 다른 모델 User
에도 사용하고 싶습니다 .
내가 할 수 코드를 복사하여 붙여하지만 난 부분으로 이동 거라 생각 그래서, 매우 건조하지 않습니다.
두 모델간에 공유되므로 그 부분을 어디에 배치해야 합니까?
감사!
Rails 규칙은 공유 부분을 /app/views/shared
.
최신 정보
레이아웃 상속은 이제 레이아웃 아래 가이드에 있으며 렌더링 템플릿 상속은 비슷하게 작동합니다.
Rails 3.1 및 다음 버전 은 템플릿 상속을 구현하므로 공유 부분의 올바른 위치는 이제 /app/views/application/
라고 products#index
생각합니다. 다음을 수행 할 수 있습니다.
-# products#index
= render @products.presence || 'empty'
-# /app/views/application/_empty.html.haml
There are no items
btw 그것은 application
연결이 컨트롤러 상속이기 때문입니다.ProductsController < ApplicationController
이런 식으로 구현 /app/views/products/_empty.html.haml
하면 위의 모든 누락 부분에 대한 폴백이며 지금은 확인할 수 없지만 템플릿 자체에 대해서도 생각합니다 ...
TL; DR
Rails 3.1, Rails 4, Rails 5 및 다음에 오는 모든 것
app/views/application
컨트롤러 경로에서보기를 찾을 수없는 경우 엔진은이 경로를 자동으로 검색합니다.
Rails 3 이하
app/views/shared
엔진은이 경로를 자동으로 검색하지 않습니다.
긴 이야기
Rails 3 (및 이전 버전)에는 공유 뷰를 저장하기위한 기본 위치 가 없습니다 .
비공식적 인 규칙 에서 공유 뷰 저장하는 응용 프로그램 /보기 / 공유 . 그래도 저장하는 위치에 관계없이 경로를 지정해야합니다.
# render app/views/shared/menu.html.erb
<%= render :partial => "shared/menu" %>
이 제안은 Agile Web Development with Rails에 의해 대중화되었습니다 .
Rails 3.1 은 공유 뷰를 저장할 위치에 대한 공식 표준 을 도입했습니다 :
app / views / application이 표준 덕분에 엔진은 이제 app / views / application 에서 템플릿을 자동으로 찾습니다 . 결과적으로 더 이상 전체 경로를 사용할 필요가 없습니다 .
그 호기심이 따를 수 있습니다 여기에 이 결정 뒤에 생각 과정을.
이전 구문
# render app/views/application/menu.html.erb
# unless menu.html.erb is found in appp/views/my_controller
<%= render :partial => "menu" %>
새로운 구문
# render app/views/application/menu.html.erb
# unless menu.html.erb is found in appp/views/my_controller
<%= render partial: "menu" %>
물론 원하는 곳에 공유 뷰를 배치하고 경로별로 참조 할 수 있습니다.
<%= render :partial => "my_own_special_shared_folder/menu" %>
그래도이 작업을 수행 할 합당한 이유가 없다면 새로운 표준을 고수하고 공유 뷰를 app/views/application
.
Rails View 는 app/views/layouts
머리글 및 바닥 글과 같은 공유 부분을 사용 하지만 Ruby on Rails 가이드는 예제app/views/shared
에서 사용합니다 . 나는 그것이 개인적인 취향에 달려 있다고 생각합니다. 기본 탐색 또는 바닥 글과 같은 상위 수준의 항목에 사용 하지만 양식과 같은 더 좁은 컨트롤러 수준의 항목에는 사용합니다.layouts
shared
일반적으로 내 뷰에는 일반적으로 사용되는 부분이 포함 된 공유 폴더가 있습니다.
어디에 두든 상관 없습니다. 파일의 경로를 제공하여 임의의 위치에서 부분을 렌더링 할 수 있습니다. 파일을 render
렌더링하는 컨트롤러와 연결할 필요가 없습니다. 나는 단순히 디렉토리 partials
아래에서 호출되는 디렉토리를 사용하고 view
다음과 같이 부분을 호출합니다.
render :partial => 'partials/mypartial'
'UFO ET IT' 카테고리의 다른 글
Angular 2에서 양식 필드를 동적으로 추가하고 제거하는 방법 (0) | 2021.01.17 |
---|---|
Apache 사용자의 umask 설정 (0) | 2021.01.17 |
UIView에 대한 현재 각도 / 회전 / 라디안을 얻습니까? (0) | 2021.01.17 |
MySQL-열의 문자 바꾸기 (0) | 2021.01.17 |
MySQL 'Order By'-올바른 영숫자 정렬 (0) | 2021.01.17 |