Rails 3 : yield / content_for 일부 기본값?
Rails #content_for
의 yield
스코프에 실제로 적용 되었는지 감지하는 방법이 있습니까?
전형적인 예는 다음과 같습니다.
<title><%= yield :page_title %></title>
템플릿이 설정하지 않은 경우
<% content_for :page_title, "Something here" %>
대신 레이아웃을 다른 곳에 두는 방법이 있습니까?
#content_for
레이아웃 자체에서 정의하려고 시도 했지만 이로 인해 텍스트가 두 배로 늘어납니다. 나는 또한 시도했다 :
<%= (yield :page_title) or default_page_title %>
#default_page_title
뷰 헬퍼는 어디에 있습니까 ?
이것은 블록을 완전히 비워 두었습니다.
content_for?
특정 이름의 콘텐츠가 있는지 확인 하는 데 사용할 수 있습니다 .
<% if content_for?(:page_title) %>
<%= yield(:page_title) %>
<% else %>
<%= default_page_title %>
<% end %>
또는
<%= content_for?(:page_title) ? yield(:page_title) : default_page_title %>
그런 다음보기에서 다음과 같은 콘텐츠를 지정할 수 있습니다.
<% content_for :page_title do %>
Awesome page
<% end %>
Rails 3부터 yield()
요청 된 키에 대한 내용이 없으면 빈 문자열을 반환하므로 다음과 같이 할 수 있습니다.
<title><%= yield(:page_title).presence || 'Default Page Title' %></title>
애플리케이션 도우미에서 다음을 정의하는 경우 :
def page_title(title = nil)
title ? content_for(:page_title) { title } : content_for(:page_title).presence
end
그런 다음 다음과 같이 할 수 있습니다.
<title><%= page_title or 'Default Page Title' %></title>
뷰에서 다음을 사용하여 사용자 지정할 수 있습니다.
<% page_title 'My Page Title' %>
향상된 content_for 메서드를 제공 하는 새로운 gem 인 dry_views를 출시했습니다 .
허용되는 답변에 대한 이점은 뷰에서 모든 논리 (if / else)를 제거 할 수 있다는 것입니다.
광범위한 예제는 Readme를 참조하십시오.
- no_content_for :key
- 같지 않음 (=) 대시 (-) 사용
- 나중에 content_for가 렌더링되는 것을 방지합니다. 이를 통해 레이아웃의 템플릿 재정의가 가능합니다.
= content_for_with_default :key
- 대시 (-)가 아닌 등호 (=)를 사용하십시오.
- 표준 "render"호출 (예 : : partial => 'foo', : locals => {: bar => ')에 전달하는 것과 동일한 블록 또는 매개 변수 집합을 통해 기본 HAML을 제공합니다 . bar '}).`
= content_for :key
- 대시 (-)가 아닌 등호 (=)를 사용하십시오.
- You provide it with a block, i.e. {render :partial => 'foo'}, and it will override content_for_with_default. It has the same precedence as no_content_for, so whichever is rendered first wins, so if a layout has either no_content_for or content_for (with or without default) the template can now override it.
Better answer for rails 3 here:
Yield and default case || do not output default case
<%= yield(:title).presence || 'My Default Title' %>
참고URL : https://stackoverflow.com/questions/5922287/rails-3-yield-content-for-with-some-default-value
'program story' 카테고리의 다른 글
Django 오류 메시지 "정의에 related_name 인수 추가" (0) | 2020.12.07 |
---|---|
Linq 구별-개수 (0) | 2020.12.07 |
void 함수에서 복귀 (0) | 2020.12.07 |
ExpandableListView -UnsupportedOperationException : addView (View, LayoutParams)는 AdapterView에서 지원되지 않습니다. (0) | 2020.12.07 |
계속하려면 아무 키나 누르십시오. (0) | 2020.12.07 |