edge
เพิ่มเติมที่ rubyonrails.org: เพิ่มเติมเกี่ยวกับ Ruby on Rails

Action View Helpers

หลังจากอ่านเอกสารนี้คุณจะรู้:

1 ภาพรวมของ Helpers ที่ Action View มีให้บริการ

WIP: ไม่ได้ระบุทุก helpers ที่นี่ สำหรับรายการเต็ม ๆ โปรดดูที่ เอกสาร API

ส่วนที่ต่อไปนี้เป็นภาพรวมสรุปเกี่ยวกับ helpers ที่มีให้ใช้ใน Action View ซึ่งแนะนำให้คุณตรวจสอบ เอกสาร API ซึ่งระบุรายละเอียดของ helpers ทั้งหมดอย่างละเอียด แต่สิ่งนี้ควรเป็นจุดเริ่มต้นที่ดี

1.1 AssetTagHelper

โมดูลนี้ให้เมธอดสำหรับสร้าง HTML ที่เชื่อมโยงวิวไปยังทรัพยากรเช่นรูปภาพ ไฟล์ JavaScript สไตล์ชีต และฟีด

โดยค่าเริ่มต้น Rails จะเชื่อมโยงไปยังทรัพยากรเหล่านี้บนโฮสต์ปัจจุบันในโฟลเดอร์ public แต่คุณสามารถกำหนดให้ Rails เชื่อมโยงไปยังทรัพยากรจากเซิร์ฟเวอร์ทรัพยากรที่มีการกำหนดค่า config.asset_host ในการกำหนดค่าแอปพลิเคชัน โดยทั่วไปจะอยู่ใน config/environments/production.rb ตัวอย่างเช่น สมมุติว่าโฮสต์ทรัพยากรของคุณคือ assets.example.com:

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

คืนค่าแท็กลิงก์ที่เบราว์เซอร์และอ่านเนื้อหาสามารถใช้ในการตรวจหาอัตโนมัติฟีด 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" />

1.1.2 image_path

คำนวณเส้นทางไปยังทรัพยากรรูปภาพในไดเรกทอรี app/assets/images จะถูกส่งผ่านเส้นทางเต็มจากรากเอกสาร ใช้ภายใน image_tag เพื่อสร้างเส้นทางรูปภาพ

image_path("edit.png") # => /assets/edit.png

จะเพิ่ม fingerprint ในชื่อไฟล์หาก config.assets.digest ถูกตั้งค่าเป็น true

image_path("edit.png")
# => /assets/edit-2d1a2db63fc738690021fedb5a65b68e.png

1.1.3 image_url

คำนวณ URL ไปยังทรัพยากรรูปภาพในไดเรกทอรี app/assets/images นี้จะเรียกใช้ image_path ภายในและผสานกับโฮสต์ปัจจุบันหรือโฮสต์ทรัพยากรของคุณ

image_url("edit.png") # => http://www.example.com/assets/edit.png

1.1.4 image_tag

คืนแท็กรูปภาพ HTML สำหรับแหล่งที่มา แหล่งที่มาสามารถเป็นเส้นทางเต็มหรือไฟล์ที่มีอยู่ในไดเรกทอรี app/assets/images ของคุณ

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

1.1.5 javascript_include_tag

คืนแท็กสคริปต์ HTML สำหรับแต่ละแหล่งที่มาที่ระบุ คุณสามารถส่งชื่อไฟล์ (นามสกุล .js เป็นทางเลือก) ของไฟล์ JavaScript ที่มีอยู่ในไดเรกทอรี app/assets/javascripts เพื่อรวมเข้ากับหน้าปัจจุบัน หรือคุณสามารถส่งเส้นทางเต็มที่เกี่ยวข้องกับรากเอกสารของคุณ

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

1.1.6 javascript_path

คำนวณเส้นทางไปยังทรัพยากรสคริปต์ JavaScript ในไดเรกทอรี app/assets/javascripts หากชื่อไฟล์แหล่งที่มาไม่มีนามสกุล จะเพิ่ม .js ให้ จะถูกส่งผ่านเส้นทางเต็มจากรากเอกสาร ใช้ภายใน javascript_include_tag เพื่อสร้างเส้นทางสคริปต์

javascript_path "common" # => /assets/common.js

1.1.7 javascript_url

คำนวณ URL ไปยังทรัพยากรสคริปต์ JavaScript ในไดเรกทอรี app/assets/javascripts นี้จะเรียกใช้ javascript_path ภายในและผสานกับโฮสต์ปัจจุบันหรือโฮสต์ทรัพยากรของคุณ

javascript_url "common"
# => http://www.example.com/assets/common.js

คืนแท็กลิงก์สไตล์ชีตสำหรับแหล่งที่มาที่ระบุเป็นอาร์กิวเมนต์ หากคุณไม่ระบุนามสกุล จะเพิ่ม .css โดยอัตโนมัติ ```ruby stylesheet_link_tag "application"

=>


#### stylesheet_path

คำนวณเส้นทางไปยังแอสเซ็ตสไตล์ในไดเรกทอรี `app/assets/stylesheets` หากชื่อไฟล์ต้นฉบับไม่มีนามสกุล จะถูกเพิ่ม `.css` ไปท้าย พาธเต็มจากรากเอกสารจะถูกส่งผ่าน ใช้ภายในโดย `stylesheet_link_tag` เพื่อสร้างเส้นทางไปยังสไตล์ชีท

```ruby
stylesheet_path "application" # => /assets/application.css

1.1.9 stylesheet_url

คำนวณ URL ไปยังแอสเซ็ตสไตล์ในไดเรกทอรี app/assets/stylesheets นี้จะเรียกใช้ stylesheet_path ภายในและผสานกับโฮสต์ปัจจุบันหรือโฮสต์แอสเซ็ตของคุณ

stylesheet_url "application"
# => http://www.example.com/assets/application.css

1.2 AtomFeedHelper

1.2.1 atom_feed

ช่วยให้การสร้างฟีด Atom เป็นเรื่องง่าย นี่คือตัวอย่างการใช้งานเต็มรูปแบบ:

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

1.3 BenchmarkHelper

1.3.1 benchmark

ช่วยให้คุณสามารถวัดเวลาการประมวลผลของบล็อกในเทมเพลตและบันทึกผลลัพธ์ลงในบันทึกได้ ใช้บล็อกนี้รอบกระบวนการที่ใช้เวลามากหรือเป็นจุดขวางเพื่อให้ได้เวลาอ่านสำหรับการปรับปรุงโค้ดของคุณ

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

สิ่งนี้จะเพิ่มบางอย่างเช่น "Process data files (0.34523)" เข้าไปในบันทึก ซึ่งคุณสามารถใช้เปรียบเทียบเวลาเมื่อปรับปรุงโค้ดของคุณ

1.4 CacheHelper

1.4.1 cache

เป็นวิธีหนึ่งสำหรับแคชเฟรกเมนต์ของวิวแทนทั้งการกระทำหรือหน้า วิธีนี้เป็นประโยชน์ในการแคชส่วนที่เป็นเมนู รายการหัวข่าว ฟรากเมนต์ HTML แบบคงที่ ฯลฯ วิธีนี้รับบล็อกที่มีเนื้อหาที่คุณต้องการแคช ดู AbstractController::Caching::Fragments เพื่อข้อมูลเพิ่มเติม

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

1.5 CaptureHelper

1.5.1 capture

เมธอด capture ช่วยให้คุณสามารถแยกส่วนของเทมเพลตออกเป็นตัวแปรได้ คุณสามารถใช้ตัวแปรนี้ที่ใดก็ได้ในเทมเพลตหรือเลเอาท์ของคุณ

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

ตัวแปรที่ถูกแยกออกมานั้นสามารถใช้ที่อื่นได้

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

1.5.2 content_for

การเรียกใช้ content_for เก็บบล็อกของมาร์กอัปในตัวระบุเพื่อใช้ในภายหลัง คุณสามารถเรียกใช้เนื้อหาที่เก็บไว้ในเทมเพลตอื่นหรือเลเอาท์โดยส่งตัวระบุเป็นอาร์กิวเมนต์ให้กับ yield

ตัวอย่างเช่น สมมติว่าเรามีเลเอาท์แอปพลิเคชันมาตรฐาน แต่ยังมีหน้าพิเศษที่ต้องการสคริปต์บางอย่างที่เว็บไซต์อื่นไม่ต้องการ เราสามารถใช้ content_for เพื่อรวมสคริปต์นี้ในหน้าพิเศษของเราโดยไม่ทำให้เว็บไซต์อื่นโตขึ้น

app/views/layouts/application.html.erb

<html>
  <head>
    <title>Welcome!</title>
    <%= yield :special_script %>
  </head>
  <body>
    <p>Welcome! The date and time is <%= Time.now %></p>
  </body>
</html>

app/views/articles/special.html.erb

<p>This is a special page.</p>

<% content_for :special_script do %>
  <script>alert('Hello!')</script>
<% end %>

1.6 DateHelper

1.6.1 distance_of_time_in_words

รายงานระยะเวลาโดยประมาณระหว่างวัตถุเวลาหรือวันที่สองอันหรือจำนวนเต็มเป็นวินาที ตั้งค่า include_seconds เป็น true หากต้องการคำประมาณที่ละเอียดมากขึ้น

distance_of_time_in_words(Time.now, Time.now + 15.seconds)
# => น้อยกว่าหนึ่งนาที
distance_of_time_in_words(Time.now, Time.now + 15.seconds, include_seconds: true)
# => น้อยกว่า 20 วินาที

1.6.2 time_ago_in_words

คล้ายกับ distance_of_time_in_words แต่ to_time ถูกกำหนดเป็น Time.now.

time_ago_in_words(3.minutes.from_now) # => 3 นาที

1.7 DebugHelper

คืนค่าแท็ก pre ที่มีวัตถุที่ถูกดัมป์โดย YAML ซึ่งสร้างวิธีการที่อ่านง่ายมากในการตรวจสอบวัตถุ

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>

1.8 FormHelper

Form helpers ออกแบบมาเพื่อทำให้การทำงานกับโมเดลง่ายขึ้นมากเมื่อเปรียบเทียบกับการใช้เพียงอิลิเมนต์ HTML มาตรฐานโดยให้เซตของเมธอดสำหรับสร้างฟอร์มขึ้นมาจากโมเดลของคุณ ช่วยให้สร้าง HTML สำหรับฟอร์มโดยให้เมธอดสำหรับแต่ละประเภทของอินพุต (เช่น ข้อความ รหัสผ่าน เลือก และอื่น ๆ) เมื่อฟอร์มถูกส่ง (เช่น เมื่อผู้ใช้กดปุ่มส่งหรือเรียกใช้ form.submit ผ่าน JavaScript) อินพุตของฟอร์มจะถูกรวบรวมเข้ากับออบเจกต์ params และส่งกลับไปยังคอนโทรลเลอร์

คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับ form helpers ใน Action View Form Helpers Guide.

1.9 JavaScriptHelper

ให้ความสามารถในการทำงานกับ JavaScript ในมุมมองของคุณ

1.9.1 escape_javascript

หนีตัวอักษรพิเศษและเครื่องหมายเริ่มต้นและเครื่องหมายคำพูดสำหรับเซกเมนต์ JavaScript

1.9.2 javascript_tag

คืนค่าแท็ก JavaScript ที่ห่อหุ้มโค้ดที่ให้มา

javascript_tag "alert('All is good')"
<script>
//<![CDATA[
alert('All is good')
//]]>
</script>

1.10 NumberHelper

ให้เมธอดสำหรับแปลงตัวเลขเป็นสตริงที่จัดรูปแบบ มีเมธอดสำหรับหมายเลขโทรศัพท์ เงินตรา เปอร์เซ็นต์ ความแม่นยำ ตัวเลขตำแหน่ง และขนาดไฟล์

1.10.1 number_to_currency

จัดรูปแบบตัวเลขเป็นสตริงสกุลเงิน (เช่น $13.65).

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

1.10.2 number_to_human

พิมพ์สวยงาม (จัดรูปและประมาณ) ตัวเลขเพื่อให้มีความอ่านง่ายขึ้นสำหรับผู้ใช้ มีประโยชน์สำหรับตัวเลขที่อาจมีขนาดใหญ่มาก

number_to_human(1234)    # => 1.23 พัน
number_to_human(1234567) # => 1.23 ล้าน

1.10.3 number_to_human_size

จัดรูปแบบไบต์ในขนาดเป็นรูปแบบที่เข้าใจง่ายมากขึ้น มีประโยชน์สำหรับรายงานขนาดไฟล์ให้ผู้ใช้

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

1.10.4 number_to_percentage

จัดรูปแบบตัวเลขเป็นสตริงเปอร์เซ็นต์

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

1.10.5 number_to_phone

จัดรูปแบบตัวเลขเป็นหมายเลขโทรศัพท์ (ค่าเริ่มต้นในสหรัฐอเมริกา)

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

1.10.6 number_with_delimiter

จัดรูปแบบตัวเลขด้วยการจัดกลุ่มพันด้วยตัวคั่น

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

1.10.7 number_with_precision

จัดรูปแบบตัวเลขด้วยระดับความแม่นยำที่ระบุ ซึ่งค่าเริ่มต้นเป็น 3

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

1.11 SanitizeHelper

โมดูล SanitizeHelper ให้ชุดเมธอดสำหรับล้างข้อความของอิลิเมนต์ HTML ที่ไม่ต้องการ

1.11.1 sanitize

sanitize helper นี้จะเข้ารหัส HTML สำหรับแท็กทั้งหมดและลบแอตทริบิวต์ทั้งหมดที่ไม่ได้รับอนุญาตโดยเฉพาะ ruby sanitize @article.body

หากผ่าน :attributes หรือ :tags ไป จะอนุญาตเฉพาะแอตทริบิวต์และแท็กที่ระบุไว้เท่านั้น และไม่อนุญาตให้มีอย่างอื่น

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

เพื่อเปลี่ยนค่าเริ่มต้นสำหรับการใช้งานหลายครั้ง เช่นการเพิ่มแท็กตารางในค่าเริ่มต้น:

class Application < Rails::Application
  config.action_view.sanitized_allowed_tags = 'table', 'tr', 'td'
end

1.11.2 sanitize_css(style)

ทำความสะอาดรหัส CSS

ลบแท็กลิงก์ทั้งหมดออกจากข้อความ และเหลือเพียงข้อความลิงก์เท่านั้น

strip_links('<a href="https://rubyonrails.org">Ruby on Rails</a>')
# => Ruby on Rails
strip_links('emails to <a href="mailto:[email protected]">[email protected]</a>.')
# => emails to [email protected].
strip_links('Blog: <a href="http://myblog.com/">Visit</a>.')
# => Blog: Visit.

1.11.4 strip_tags(html)

ลบแท็ก HTML ทั้งหมดออกจาก html รวมถึงคอมเมนต์ด้วย ฟังก์ชันนี้ใช้งานโดย rails-html-sanitizer gem

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

หมายเหตุ: ผลลัพธ์อาจยังมีตัวอักษร '<', '>', '&' ที่ไม่ได้รับการหลีกเลี่ยงและทำให้เกิดความสับสนกับเบราว์เซอร์

1.12 UrlHelper

ให้เมธอดเพื่อสร้างลิงก์และรับ URL ที่ขึ้นอยู่กับระบบเร้าท์ติ้ง

1.12.1 url_for

คืนค่า URL สำหรับชุด options ที่ให้มา

1.12.1.1 ตัวอย่าง
url_for @profile
# => /profiles/1

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

ลิงก์ไปยัง URL ที่ได้รับมาจาก url_for ในพื้นหลัง ใช้โดยส่วนใหญ่เพื่อสร้างลิงก์ทรัพยากร RESTful ซึ่งสำหรับตัวอย่างนี้ จะยุบเป็นเมื่อส่งโมเดลไปยัง link_to

ตัวอย่าง

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

คุณสามารถใช้บล็อกได้เช่นกันหากเป้าหมายลิงก์ของคุณไม่สามารถพอดีกับพารามิเตอร์ชื่อ ตัวอย่าง ERB:

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

จะแสดงผลเป็น:

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

ดู เอกสาร API เพิ่มเติม

1.12.3 button_to

สร้างฟอร์มที่ส่งไปยัง URL ที่ระบุ ฟอร์มจะมีปุ่มส่งค่าของ name

1.12.3.1 ตัวอย่าง
<%= button_to "Sign in", sign_in_path %>

จะแสดงผลประมาณนี้:

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

ดู เอกสาร API เพิ่มเติม

1.13 CsrfHelper

คืนค่าแท็กเมต้า "csrf-param" และ "csrf-token" พร้อมชื่อพารามิเตอร์และโทเค็นการป้องกันการโจมตีแบบข้ามไซต์

<%= csrf_meta_tags %>

หมายเหตุ: แบบฟอร์มปกติจะสร้างฟิลด์ที่ซ่อนอยู่ดังนั้นจึงไม่ใช้แท็กเหล่านี้ สามารถดูรายละเอียดเพิ่มเติมได้ใน คู่มือความปลอดภัยของ Rails

ข้อเสนอแนะ

คุณสามารถช่วยปรับปรุงคุณภาพของคู่มือนี้ได้

กรุณาช่วยเพิ่มเติมหากพบข้อผิดพลาดหรือข้อผิดพลาดทางความจริง เพื่อเริ่มต้นคุณสามารถอ่านส่วน การสนับสนุนเอกสาร ของเราได้

คุณอาจพบเนื้อหาที่ไม่สมบูรณ์หรือเนื้อหาที่ไม่ได้อัปเดต กรุณาเพิ่มเอกสารที่ขาดหายไปสำหรับเนื้อหาหลัก โปรดตรวจสอบ Edge Guides ก่อนเพื่อตรวจสอบ ว่าปัญหาได้รับการแก้ไขหรือไม่ในสาขาหลัก ตรวจสอบ คู่มือแนวทาง Ruby on Rails เพื่อดูรูปแบบและกฎเกณฑ์

หากคุณพบข้อผิดพลาดแต่ไม่สามารถแก้ไขได้เอง กรุณา เปิดปัญหา.

และสุดท้าย การสนทนาใด ๆ เกี่ยวกับ Ruby on Rails เอกสารยินดีต้อนรับที่สุดใน เว็บบอร์ดอย่างเป็นทางการของ Ruby on Rails.