액션 뷰 헬퍼

이 가이드를 읽고 나면 다음을 알 수 있습니다:

  • 날짜, 문자열, 숫자를 형식화하는 방법.
  • 텍스트와 태그를 다루는 방법.
  • 이미지, 비디오, 스타일시트 등에 링크하는 방법.
  • 뷰에서 Atom 피드와 JavaScript를 다루는 방법.
  • 콘텐츠를 캐시, 캡처, 디버그 및 sanitize하는 방법.

다음은 액션 뷰에서 가장 일반적으로 사용되는 헬퍼 중 일부를 설명합니다. 이는 좋은 시작점이 되지만, 더 자세한 내용은 전체 API 문서를 참조하는 것이 좋습니다.

형식화

날짜

이 헬퍼는 상황에 맞는 인간 가독성 형식으로 날짜 및/또는 시간 요소를 표시하는 데 도움이 됩니다.

distanceoftimeinwords

Time 또는 Date 객체 또는 초 단위 정수 사이의 대략적인 시간 차이를 보고합니다. include_seconds를 true로 설정하면 더 자세한 근사치를 얻을 수 있습니다.

distance_of_time_in_words(Time.current, 15.seconds.from_now)
# => 1분 미만
distance_of_time_in_words(Time.current, 15.seconds.from_now, include_seconds: true)
# => 20초 미만

참고: Time.now 대신 Time.current를 사용하는 이유는 Time.current가 Rails에 설정된 시간대를 기준으로 현재 시간을 반환하는 반면, Time.now는 서버의 시간대를 기준으로 Time 객체를 반환하기 때문입니다.

자세한 내용은 API 문서를 참조하세요.

timeagoin_words

Time 또는 Date 객체 또는 초 단위 정수와 Time.current 사이의 대략적인 시간 차이를 보고합니다.

time_ago_in_words(3.minutes.from_now) # => 3분

자세한 내용은 API 문서를 참조하세요.

숫자

숫자를 형식화된 문자열로 변환하는 메서드 집합입니다. 전화번호, 통화, 백분율, 정밀도, 위치 표기법, 파일 크기 등에 대한 메서드가 제공됩니다.

numbertocurrency

숫자를 통화 문자열(예: $13.65)로 형식화합니다.

number_to_currency(1234567890.50) # => $1,234,567,890.50

자세한 내용은 API 문서를 참조하세요.

numbertohuman

사용자가 더 읽기 쉽도록 숫자를 예쁘게 인쇄(형식화 및 근사)합니다. 매우 큰 숫자를 보고할 때 유용합니다.

number_to_human(1234)    # => 1.23 Thousand
number_to_human(1234567) # => 1.23 Million

자세한 내용은 API 문서를 참조하세요.

numbertohuman_size

바이트 크기를 더 이해하기 쉬운 표현으로 형식화합니다. 사용자에게 파일 크기를 보고할 때 유용합니다.

number_to_human_size(1234)    # => 1.21 KB
number_to_human_size(1234567) # => 1.18 MB

자세한 내용은 API 문서를 참조하세요.

numbertopercentage

숫자를 백분율 문자열로 형식화합니다.

number_to_percentage(100, precision: 0) # => 100%

자세한 내용은 API 문서를 참조하세요.

numbertophone

숫자를 전화번호(기본적으로 미국)로 형식화합니다.

number_to_phone(1235551234) # => 123-555-1234

자세한 내용은 API 문서를 참조하세요.

numberwithdelimiter

구분 기호를 사용하여 숫자의 천 단위를 그룹화합니다.

number_with_delimiter(12345678) # => 12,345,678

자세한 내용은 API 문서를 참조하세요.

numberwithprecision

지정된 precision 수준으로 숫자를 형식화합니다. 기본값은 3입니다.

number_with_precision(111.2345)               # => 111.235
number_with_precision(111.2345, precision: 2) # => 111.23

자세한 내용은 API 문서를 참조하세요.

텍스트

문자열을 필터링, 형식화 및 변환하는 메서드 집합입니다.

excerpt

textphrase가 주어지면 excerptphrase의 첫 번째 발생을 검색하고 radius에 의해 결정된 요청된 주변 텍스트를 추출합니다. 시작/끝이 텍스트의 시작/끝과 일치하지 않으면 생략 표시가 앞/뒤에 붙습니다.

excerpt("This is a very beautiful morning", "very", separator: " ", radius: 1)
# => ...a very beautiful...

excerpt("This is also an example", "an", radius: 8, omission: "<chop> ")
#=> <chop> is also an example

자세한 내용은 API 문서를 참조하세요.

pluralize

숫자 값에 따라 단어의 단수 또는 복수 형태를 반환합니다.

pluralize(1, "person") # => 1 person
pluralize(2, "person") # => 2 people
pluralize(3, "person", plural: "users") # => 3 users

자세한 내용은 API 문서를 참조하세요.

truncate

지정된 length까지 text를 잘라냅니다. 텍스트가 잘린 경우 결과의 총 길이가 length를 초과하지 않도록 생략 표시가 추가됩니다.

truncate("Once upon a time in a world far far away")
# => "Once upon a time in a world..."

truncate("Once upon a time in a world far far away", length: 17)
# => "Once upon a ti..."

truncate("one-two-three-four-five", length: 20, separator: "-")
# => "one-two-three..."

truncate("And they found that many people were sleeping better.", length: 25, omission: "... (continued)")
# => "And they f... (continued)"

truncate("<p>Once upon a time in a world far far away</p>", escape: false)
# => "<p>Once upon a time in a wo..."

자세한 내용은 API 문서를 참조하세요.

word_wrap

텍스트를 line_width 너비 이하의 줄로 래핑합니다.

word_wrap("Once upon a time", line_width: 8)
# => "Once\nupon a\ntime"

자세한 내용은 API 문서를 참조하세요.

폼 헬퍼는 표준 HTML 요소만 사용하는 것보다 모델 작업을 간소화합니다. 모델을 기반으로 폼을 생성하는 다양한 메서드를 제공합니다. 일부 메서드는 텍스트 필드, 비밀번호 필드, 선택 드롭다운 등과 같은 특정 유형의 입력에 해당합니다. 폼이 제출되면 폼 내의 입력이 params 객체로 그룹화되어 컨트롤러로 다시 전송됩니다.

폼 헬퍼에 대해 자세히 알아보려면 액션 뷰 폼 헬퍼 가이드를 참조하세요.

탐색

라우팅 하위 시스템에 의존하는 링크와 URL을 구축하는 메서드 집합입니다.

button_to

전달된 URL로 제출되는 폼을 생성합니다. 폼에는 name의 값을 가진 제출 버튼이 있습니다.

<%= button_to "Sign in", sign_in_path %>

다음과 같은 HTML을 출력합니다:

<form method="post" action="/sessions" class="button_to">
  <input type="submit" value="Sign in" />
</form>

자세한 내용은 API 문서를 참조하세요.

current_page?

현재 요청 URL이 주어진 options와 일치하는 경우 true를 반환합니다.

<% if current_page?(controller: 'profiles', action: 'show') %>
  <strong>Currently on the profile page</strong>
<% end %>

자세한 내용은 API 문서를 참조하세요.

내부적으로 url_for에서 파생된 URL에 대한 링크를 생성합니다. 특히 모델을 인수로 전달할 때 RESTful 리소스에 대한 링크를 만드는 데 일반적으로 사용됩니다.

link_to "Profile", @profile
# => <a href="/profiles/1">Profile</a>

link_to "Book", @book # given a composite primary key [:author_id, :id]
# => <a href="/books/2_1">Book</a>

link_to "Profiles", profiles_path
# => <a href="/profiles">Profiles</a>

link_to nil, "https://example.com"
# => <a href="https://www.example.com">https://www.example.com</a>

link_to "Articles", articles_path, id: "articles", class: "article__container"
# => <a href="/articles" class="article__container" id="articles">Articles</a>

이름 매개변수에 맞지 않는 링크 대상의 경우 블록을 사용할 수 있습니다.

<%= link_to @profile do %>
  <strong><%= @profile.name %></strong> -- <span>Check it out!</span>
<% end %>

다음과 같은 HTML을 출력합니다:

<a href="/profiles/1">
  <strong>David</strong> -- <span>Check it out!</span>
</a>

자세한 내용은 API 문서를 참조하세요.

mail_to

지정된 이메일 주소에 대한 mailto 링크 태그를 생성합니다. 링크 텍스트, 추가 HTML 옵션 및 이메일 주소 인코딩 여부를 지정할 수도 있습니다.

mail_to "john_doe@gmail.com"
# => <a href="mailto:john_doe@gmail.com">john_doe@gmail.com</a>

mail_to "me계속해서 한국어 번역을 제공하겠습니다.

### mail_to

지정된 이메일 주소에 대한 `mailto` 링크 태그를 생성합니다. 링크 텍스트, 추가 HTML 옵션 및 이메일 주소 인코딩 여부를 지정할 수도 있습니다.

```ruby
mail_to "me@john_doe.com", cc: "me@jane_doe.com",
        subject: "This is an example email"
# => <a href="mailto:"me@john_doe.com?cc=me@jane_doe.com&subject=This%20is%20an%20example%20email">"me@john_doe.com</a>

자세한 내용은 API 문서를 참조하세요.

url_for

제공된 options에 대한 URL을 반환합니다.

url_for @profile
# => /profiles/1

url_for [ @hotel, @booking, page: 2, line: 3 ]
# => /hotels/1/bookings/1?line=3&page=2

url_for @post # given a composite primary key [:blog_id, :id]
# => /posts/1_2

Sanitization

원치 않는 HTML 요소를 제거하는 메서드 집합입니다. 이 헬퍼는 안전하고 유효한 HTML/CSS만 렌더링되도록 하는 데 특히 유용합니다. 또한 사용자 입력에서 잠재적으로 악의적인 내용을 이스케이프하거나 제거하여 뷰에 렌더링하기 전에 XSS 공격을 방지하는 데에도 유용할 수 있습니다.

이 기능은 내부적으로 rails-html-sanitizer 젬에 의해 구동됩니다.

sanitize

sanitize 메서드는 모든 태그를 HTML 인코딩하고 허용되지 않는 모든 속성을 제거합니다.

sanitize @article.body

attributes 또는 tags 옵션 중 하나라도 전달되면 언급된 속성과 태그만 허용되고 나머지는 모두 제거됩니다.

sanitize @article.body, tags: %w(table tr td), attributes: %w(id class style)

여러 번 사용할 때 기본값을 변경하려면 예를 들어 테이블 태그를 기본값에 추가할 수 있습니다:

# config/application.rb
class Application < Rails::Application
  config.action_view.sanitized_allowed_tags = %w(table tr td)
end

자세한 내용은 API 문서를 참조하세요.

sanitize_css

특히 HTML 콘텐츠의 style 속성을 처리할 때 CSS 코드를 sanitize합니다. sanitize_css는 사용자 생성 콘텐츠 또는 스타일 속성을 포함하는 동적 콘텐츠를 처리할 때 특히 유용합니다.

아래 sanitize_css 메서드는 허용되지 않는 스타일을 제거합니다.

sanitize_css("background-color: red; color: white; font-size: 16px;")

자세한 내용은 API 문서를 참조하세요.

텍스트에서 모든 링크 태그를 제거하고 링크 텍스트만 남깁니다.

strip_links("<a href='https://rubyonrails.org'>Ruby on Rails</a>")
# => Ruby on Rails

strip_links("emails to <a href='mailto:me@email.com'>me@email.com</a>.")
# => emails to me@email.com.

strip_links("Blog: <a href='http://myblog.com/'>Visit</a>.")
# => Blog: Visit.

자세한 내용은 API 문서를 참조하세요.

strip_tags

HTML에서 모든 태그, 주석 및 특수 문자를 제거합니다.

strip_tags("Strip <i>these</i> tags!")
# => Strip these tags!

strip_tags("<b>Bold</b> no more! <a href='more.html'>See more</a>")
# => Bold no more! See more

strip_links('<<a href="https://example.org">malformed & link</a>')
# => &lt;malformed &amp; link

자세한 내용은 API 문서를 참조하세요.

자산

뷰에서 이미지, JavaScript 파일, 스타일시트, 피드 등의 자산에 대한 HTML을 생성하는 메서드 집합입니다.

기본적으로 Rails는 public 폴더의 현재 호스트에 이러한 자산에 링크합니다. 그러나 config.asset_host를 애플리케이션 구성에서 설정하여 전용 자산 서버에서 자산을 가리키도록 할 수 있습니다. 일반적으로 config/environments/production.rb에서 설정합니다.

예를 들어 자산 호스트가 assets.example.com이라고 가정해 보겠습니다:

config.asset_host = "assets.example.com"

그러면 image_tag에 대한 해당 URL은 다음과 같습니다:

image_tag("rails.png")
# => <img src="//assets.example.com/images/rails.png" />

audio_tag

단일 태그의 문자열 소스 또는 여러 소스의 중첩된 소스 태그를 사용하여 HTML 오디오 태그를 생성합니다. sources는 전체 경로, 공용 오디오 디렉토리의 파일 또는 Active Storage 첨부 파일일 수 있습니다.

audio_tag("sound")
# => <audio src="/audios/sound"></audio>

audio_tag("sound.wav", "sound.mid")
# => <audio><source src="/audios/sound.wav" /><source src="/audios/sound.mid" /></audio>

audio_tag("sound", controls: true)
# => <audio controls="controls" src="/audios/sound"></audio>

정보: 내부적으로 audio_tagAssetUrlHelpers의 audio_path를 사용하여 오디오 경로를 구축합니다.

자세한 내용은 API 문서를 참조하세요.

브라우저와 피드 리더가 RSS, Atom 또는 JSON 피드를 자동 감지할 수 있는 링크 태그를 반환합니다.

auto_discovery_link_tag(:rss, "http://www.example.com/feed.rss", { title: "RSS Feed" })
# => <link rel="alternate" type="application/rss+xml" title="RSS Feed" href="http://www.example.com/feed.rss" />

자세한 내용은 API 문서를 참조하세요.

faviconlinktag

자산 파이프라인에 의해 관리되는 favicon에 대한 링크 태그를 반환합니다. source는 전체 경로 또는 자산 디렉토리에 있는 파일일 수 있습니다.

favicon_link_tag
# => <link href="/assets/favicon.ico" rel="icon" type="image/x-icon" />

자세한 내용은 API 문서를 참조하세요.

image_tag

소스에 대한 HTML 이미지 태그를 반환합니다. source는 전체 경로 또는 app/assets/images 디렉토리에 있는 파일일 수 있습니다.

image_tag("icon.png")
# => <img src="/assets/icon.png" />

image_tag("icon.png", size: "16x10", alt: "Edit Article")
# => <img src="/assets/icon.png" width="16" height="10" alt="Edit Article" />

정보: 내부적으로 image_tagAssetUrlHelpers의 image_path를 사용하여 이미지 경로를 구축합니다.

자세한 내용은 API 문서를 참조하세요.

javascriptincludetag

제공된 각 소스에 대한 HTML 스크립트 태그를 반환합니다. app/assets/javascripts 디렉토리에 있는 JavaScript 파일의 파일 이름(.js 확장자는 선택 사항)을 전달하거나 문서 루트에 상대적인 전체 경로를 전달할 수 있습니다.

javascript_include_tag("common")
# => <script src="/assets/common.js"></script>

javascript_include_tag("common", async: true)
# => <script src="/assets/common.js" async="async"></script>

가장 일반적인 속성 중 일부는 asyncdefer입니다. async는 스크립트가 병렬로 로드되어 가능한 빨리 구문 분석되고 평가될 수 있도록 하고, defer는 문서 구문 분석이 완료된 후에 스크립트가 실행되도록 지정합니다.

정보: 내부적으로 javascript_include_tagAssetUrlHelpers의 javascript_path를 사용하여 스크립트 경로를 구축합니다.

자세한 내용은 API 문서를 참조하세요.

picture_tag

소스에 대한 HTML picture 태그를 반환합니다. String, Array 또는 Block을 전달할 수 있습니다.

picture_tag("icon.webp", "icon.png")

이렇게 생성된 HTML은 다음과 같습니다:

<picture>
  <source srcset="/assets/icon.webp" type="image/webp" />
  <source srcset="/assets/icon.png" type="image/png" />
  <img src="/assets/icon.png" />
</picture>

자세한 내용은 API 문서를 참조하세요.

preloadlinktag

브라우저가 소스를 사전 로드할 수 있는 링크 태그를 반환합니다. 소스는 자산 파이프라인에 의해 관리되는 리소스의 경로, 전체 경로 또는 URI일 수 있습니다.

preload_link_tag("application.css")
# => <link rel="preload" href="/assets/application.css" as="style" type="text/css" />

자세한 내용은 API 문서를 참조하세요.

stylesheetlinktag

인수로 지정된 소스에 대한 스타일시트 링크 태그를 반환합니다. 확장자를 지정하지 않으면 자동으로 .css가 추가됩니다.

stylesheet_link_tag("application")
# => <link href="/assets/application.css" rel="stylesheet" />

stylesheet_link_tag("application", media: "all")
# => <link href="/assets/application.css" media="all" rel="stylesheet" />

media는 링크의 미디어 유형을 지정하는 데 사용됩니다. 가장 일반적인 미디어 유형은 all, screen, printspeech입니다.

정보: 내부적으로 stylesheet_link_tagAssetUrlHelpers의 stylesheet_path를 사용하여 스타일시트 경로를 구축합니다.

자세한 내용은 [API 문계속해서 한국어 번역을 제공하겠습니다.

video_tag

소스(들)에 대한 HTML 비디오 태그를 생성합니다. 문자열 소스의 단일 태그 또는 여러 소스의 중첩된 소스 태그를 사용할 수 있습니다. sources는 전체 경로, 공용 비디오 디렉토리의 파일 또는 Active Storage 첨부 파일일 수 있습니다.

video_tag("trailer")
# => <video src="/videos/trailer"></video>

video_tag(["trailer.ogg", "trailer.flv"])
# => <video><source src="/videos/trailer.ogg" /><source src="/videos/trailer.flv" /></video>

video_tag("trailer", controls: true)
# => <video controls="controls" src="/videos/trailer"></video>

정보: 내부적으로 video_tagAssetUrlHelpers의 video_path를 사용하여 비디오 경로를 구축합니다.

자세한 내용은 API 문서를 참조하세요.

JavaScript

뷰에서 JavaScript를 작업하는 메서드 집합입니다.

escape_javascript

JavaScript 세그먼트에 대한 캐리지 리턴과 작은따옴표 및 큰따옴표를 이스케이프합니다. 브라우저가 구문 분석할 때 잘못된 문자가 포함되지 않도록 하려면 이 메서드를 사용하여 텍스트 문자열을 이스케이프해야 합니다.

예를 들어 인사말에 큰따옴표가 포함된 부분이 있는 부분 템플릿이 있는 경우 인사말을 이스케이프하여 JavaScript 경고에 사용할 수 있습니다.

<%# app/views/users/greeting.html.rb %>
My name is <%= current_user.name %>, and I'm here to say "Welcome to our website!"
<script>
  var greeting = "<%= escape_javascript render('users/greeting') %>";
  alert(`Hello, ${greeting}`);
</script>

이렇게 하면 따옴표가 올바르게 이스케이프되어 경고 상자에 인사말이 표시됩니다.

자세한 내용은 API 문서를 참조하세요.

javascript_tag

제공된 코드를 래핑하는 JavaScript 태그를 반환합니다. <script> 태그의 동작을 제어하는 해시를 전달할 수 있습니다.

javascript_tag("alert('All is good')", type: "application/javascript")
<script type="application/javascript">
//<![CDATA[
alert('All is good')
//]]>
</script>

인수 대신 블록을 사용할 수도 있습니다.

<%= javascript_tag type: "application/javascript" do %>
  alert("Welcome to my app!")
<% end %>

자세한 내용은 API 문서를 참조하세요.

대체 태그

프로그래밍 방식으로 HTML 태그를 생성하는 메서드 집합입니다.

tag

주어진 nameoptions로 독립형 HTML 태그를 생성합니다.

모든 태그는 다음과 같이 빌드할 수 있습니다:

tag.some_tag_name(optional content, options)

여기서 태그 이름은 br, div, section, article 또는 다른 태그일 수 있습니다.

예를 들면 다음과 같습니다:

tag.h1 "All titles fit to print"
# => <h1>All titles fit to print</h1>

tag.div "Hello, world!"
# => <div>Hello, world!</div>

또한 옵션을 전달하여 생성된 태그에 속성을 추가할 수 있습니다.

tag.section class: %w( kitties puppies )
# => <section class="kitties puppies"></section>

또한 data 옵션을 사용하여 하위 속성이 있는 HTML data-* 속성을 전달할 수 있습니다. 하위 속성은 JavaScript와 잘 작동하도록 대시로 구분됩니다.

tag.div data: { user_id: 123 }
# => <div data-user-id="123"></div>

자세한 내용은 API 문서를 참조하세요.

token_list

인수에서 토큰 문자열을 빌드하여 반환합니다. 이 메서드는 class_names의 별칭으로도 사용됩니다.

token_list("cats", "dogs")
# => "cats dogs"

token_list(nil, false, 123, "", "foo", { bar: true })
# => "123 foo bar"

mobile, alignment = true, "center"
token_list("flex items-#{alignment}", "flex-col": mobile)
# => "flex items-center flex-col"
class_names("flex items-#{alignment}", "flex-col": mobile) # using the alias
# => "flex items-center flex-col"

Capture Blocks

템플릿 또는 레이아웃 파일의 다른 부분에서 사용할 수 있는 생성된 마크업을 추출하는 메서드 집합입니다.

capture를 통해 블록을 변수에 캡처하고, content_for를 통해 레이아웃에 사용할 블록을 캡처할 수 있습니다.

capture

capture 메서드를 사용하면 템플릿의 일부를 변수로 추출할 수 있습니다.

<% @greeting = capture do %>
  <p>Welcome! The date and time is <%= Time.current %></p>
<% end %>

그런 다음 이 변수를 템플릿, 레이아웃 또는 헬퍼에서 사용할 수 있습니다.

<html>
  <head>
    <title>Welcome!</title>
  </head>
  <body>
    <%= @greeting %>
  </body>
</html>

capture의 반환 값은 블록에 의해 생성된 문자열입니다.

@greeting
# => "Welcome to my shiny new web page! The date and time is 2018-09-06 11:09:16 -0500"

자세한 내용은 API 문서를 참조하세요.

content_for

content_for를 호출하면 나중에 사용할 수 있도록 마크업 블록이 식별자에 저장됩니다. 식별자를 인수로 yield하여 다른 템플릿, 헬퍼 모듈 또는 레이아웃에 저장된 콘텐츠를 사용할 수 있습니다.

일반적인 사용 사례는 content_for 블록에서 페이지의 제목을 설정하는 것입니다.

특수 페이지의 뷰에서 content_for 블록을 정의하고 레이아웃 내에서 yield합니다. 다른 페이지의 경우 content_for 블록이 사용되지 않으면 비어 있어 아무것도 yield되지 않습니다.

<%# app/views/users/special_page.html.erb %>
<% content_for(:html_title) { "Special Page Title" } %>
<%# app/views/layouts/application.html.erb %>
<html>
  <head>
    <title><%= content_for?(:html_title) ? yield(:html_title) : "Default Title" %></title>
  </head>
</html>

위의 예에서 content_for? 술어 메서드를 사용하여 제목을 조건부로 렌더링하는 것을 알 수 있습니다. 이 메서드는 content_for를 사용하여 콘텐츠가 캡처되었는지 확인하여 레이아웃의 일부를 조정할 수 있습니다.

또한 헬퍼 모듈 내에서 content_for를 사용할 수 있습니다.

# app/helpers/title_helper.rb
module TitleHelper
  def html_title
    content_for(:html_title) || "Default Title"
  end
end

이제 레이아웃에서 html_title을 호출하여 content_for 블록에 저장된 콘텐츠를 검색할 수 있습니다. special_page와 같이 content_for 블록이 설정된 페이지의 경우 제목이 표시됩니다. 그렇지 않으면 “Default Title"이 표시됩니다.

경고: content_for는 캐시에서 무시됩니다. 따라서 조각 캐시에 사용되는 요소에는 사용하지 않아야 합니다.

참고: capturecontent_for의 차이점은 무엇일까요?

capture는 변수에 마크업 블록을 캡처하는 데 사용되는 반면, content_for는 나중에 사용할 수 있도록 식별자에 마크업 블록을 캡처하는 데 사용됩니다. 내부적으로 content_for는 실제로 capture를 호출합니다. 그러나 여러 번 호출될 때의 동작이 다릅니다.

content_for는 반복해서 호출될 수 있으며, 특정 식별자에 대해 받은 블록을 제공된 순서대로 연결합니다. 반면 capture는 블록의 내용만 반환하고 이전 호출을 추적하지 않습니다.

자세한 내용은 API 문서를 참조하세요.

성능

benchmark

비용이 많이 드는 작업 또는 잠재적인 병목 지점 주변에 benchmark 블록을 래핑하여 작업에 대한 시간 측정값을 얻습니다.

<% benchmark "Process data files" do %>
  <%= expensive_files_operation %>
<% end %>

이렇게 하면 로그에 Process data files (0.34523)과 같은 내용이 추가되어 코드 최적화 시 타이밍을 비교할 수 있습니다.

참고: 이 헬퍼는 Active Support의 일부이며 컨트롤러, 헬퍼, 모델 등에서도 사용할 수 있습니다.

자세한 내용은 API 문서를 참조하세요.

cache

전체 작업 또는 페이지 대신 뷰의 조각을 캐시할 수 있습니다. 이 기술은 메뉴, 뉴스 주제 목록, 정적 HTML 조각 등과 같은 조각을 캐시하는 데 유용합니다. 뷰 논리의 조각을 캐시 블록으로 래핑하고 다음 요청이 들어올 때 캐시 저장소에서 서비스할 수 있습니다.

cache 메서드는 캐시하려는 콘텐츠를 포함하는 블록을 사용합니다.

예를 들어 애플리케이션 레이아웃의 푸터를 cache 블록으로 래핑할 수 있습니다.

<% cache do %>
  <%= render "application/footer" %>
<% end %>

모델 인스턴스를 기반으로 캐시할 수도 있습니다. 예를 들어 페이지의 각 기사를 article 객체를 전달하여 개별적으로 캐시할 수 있습니다.

<% @articles.each do |article| %>
  <% cache article do %>
    <%= render article %>
  <% end %>
<% end %>

애플리케이션이 이 페이지에 대한 첫 번째 요청을 받으면 Rails는 고유한 키로 새 캐시 항목을 작성합니다. 키는 다음과 같습니다:

views/articles/index:bea67108094918eeba32cd4a6f786301/articles/1

Fragment Caching과 [API 문서](https://api.rubyonrails.org/classes/ActionView/Helpers/CacheHelper.html계속해서 한국어 번역을 제공하겠습니다.

atom_feed

Atom 피드는 콘텐츠를 동기화하는 데 사용되는 XML 기반 파일 형식이며 피드 리더에서 콘텐츠를 찾아보거나 검색 엔진이 추가 정보를 발견하는 데 도움이 될 수 있습니다.

이 헬퍼는 Atom 피드 구축을 쉽게 만들며, 주로 XML을 생성하는 Builder 템플릿에서 사용됩니다. 다음은 전체 사용 예입니다:

# config/routes.rb
resources :articles
# app/controllers/articles_controller.rb
def index
  @articles = Article.all

  respond_to do |format|
    format.html
    format.atom
  end
end
# app/views/articles/index.atom.builder
atom_feed do |feed|
  feed.title("Articles Index")
  feed.updated(@articles.first.created_at)

  @articles.each do |article|
    feed.entry(article) do |entry|
      entry.title(article.title)
      entry.content(article.body, type: "html")

      entry.author do |author|
        author.name(article.author_name)
      end
    end
  end
end

자세한 내용은 API 문서를 참조하세요.

debug

객체의 YAML 표현을 pre 태그로 래핑하여 반환합니다. 이를 통해 객체를 매우 읽기 쉽게 검사할 수 있습니다.

my_hash = { "first" => 1, "second" => "two", "third" => [1, 2, 3] }
debug(my_hash)
<pre class="debug_dump">---
first: 1
second: two
third:
- 1
- 2
- 3
</pre>

자세한 내용은 API 문서를 참조하세요.