액션 뷰 헬퍼
이 가이드를 읽고 나면 다음을 알 수 있습니다:
- 날짜, 문자열, 숫자를 형식화하는 방법.
- 텍스트와 태그를 다루는 방법.
- 이미지, 비디오, 스타일시트 등에 링크하는 방법.
- 뷰에서 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
text
와 phrase
가 주어지면 excerpt
는 phrase
의 첫 번째 발생을 검색하고 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 문서를 참조하세요.
link_to
내부적으로 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
텍스트에서 모든 링크 태그를 제거하고 링크 텍스트만 남깁니다.
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>') # => <malformed & 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_tag
는 AssetUrlHelpers의 audio_path
를 사용하여 오디오 경로를 구축합니다.
자세한 내용은 API 문서를 참조하세요.
autodiscoverylink_tag
브라우저와 피드 리더가 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_tag
는 AssetUrlHelpers의 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>
가장 일반적인 속성 중 일부는 async
와 defer
입니다. async
는 스크립트가 병렬로 로드되어 가능한 빨리 구문 분석되고 평가될 수 있도록 하고, defer
는 문서 구문 분석이 완료된 후에 스크립트가 실행되도록 지정합니다.
정보: 내부적으로 javascript_include_tag
는 AssetUrlHelpers의 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
, print
및 speech
입니다.
정보: 내부적으로 stylesheet_link_tag
는 AssetUrlHelpers의 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_tag
는 AssetUrlHelpers의 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
주어진 name
과 options
로 독립형 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
는 캐시에서 무시됩니다. 따라서 조각 캐시에 사용되는 요소에는 사용하지 않아야 합니다.
참고: capture
와 content_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 문서를 참조하세요.