นี่คือบล็อกของรหัสทับทิมที่ใช้ประโยชน์จากวิธีการของ Rails helper หากคุณยังไม่คุ้นเคยกับบล็อกคุณจะเห็นพวกเขาเป็นจำนวนมากใน Ruby
respond_to
เป็นวิธีการ Rails helper ที่แนบมากับคลาส Controller (หรือมากกว่านั้นเป็นคลาส super) มันคือการอ้างอิงการตอบสนองที่จะถูกส่งไปยังมุมมอง (ซึ่งจะไปที่เบราว์เซอร์)
บล็อกในตัวอย่างของคุณคือการจัดรูปแบบข้อมูล - โดยผ่านพารามิเตอร์ 'รูปแบบ' ในบล็อก - จะถูกส่งจากคอนโทรลเลอร์ไปยังมุมมองเมื่อใดก็ตามที่เบราว์เซอร์ทำการร้องขอข้อมูล html หรือ json
หากคุณอยู่ในเครื่องของคุณและคุณได้ติดตั้งนั่งร้านสำหรับโพสต์คุณสามารถไปที่http://localhost:3000/posts
และคุณจะเห็นโพสต์ทั้งหมดของคุณในรูปแบบ html แต่ถ้าคุณพิมพ์สิ่งนี้ http://localhost:3000/posts.json
คุณจะเห็นโพสต์ทั้งหมดของคุณในวัตถุ json ที่ส่งมาจากเซิร์ฟเวอร์
สิ่งนี้มีประโยชน์มากสำหรับการสร้างจาวาสคริปต์แอปพลิเคชันที่ต้องผ่าน json ไปมาจากเซิร์ฟเวอร์ หากคุณต้องการคุณสามารถสร้าง json api บนรางด้านหลังของคุณได้อย่างง่ายดายและผ่านเพียงมุมมองเดียวเท่านั้นเช่นมุมมองดัชนีของตัวควบคุมโพสต์ จากนั้นคุณสามารถใช้ไลบรารีจาวาสคริปต์เช่นJqueryหรือBackbone (หรือทั้งสองอย่าง) เพื่อจัดการข้อมูลและสร้างส่วนต่อประสานของคุณเอง สิ่งเหล่านี้เรียกว่าUIs แบบอะซิงโครนัสและกำลังได้รับความนิยมอย่างมาก (Gmail คือหนึ่ง) พวกมันเร็วมากและทำให้ผู้ใช้ได้รับประสบการณ์การใช้งานบนเว็บมากขึ้น แน่นอนว่านี่เป็นข้อดีอย่างหนึ่งของการจัดรูปแบบข้อมูลของคุณ
The Rails 3 วิธีในการเขียนนี่คือ:
class PostsController < ApplicationController
# GET /posts
# GET /posts.xml
respond_to :html, :xml, :json
def index
@posts = Post.all
respond_with(@posts)
end
#
# All your other REST methods
#
end
โดยการวางrespond_to :html, :xml, :json
ที่ด้านบนของคลาสคุณสามารถประกาศรูปแบบทั้งหมดที่คุณต้องการให้ตัวควบคุมของคุณส่งไปยังมุมมองของคุณ
จากนั้นในวิธีการควบคุมสิ่งที่คุณต้องทำคือ response_with (@whething_object_you_have)
มันช่วยให้โค้ดของคุณง่ายขึ้นเล็กน้อยกว่าสิ่งที่ Rails สร้างขึ้นโดยอัตโนมัติ
หากคุณต้องการทราบเกี่ยวกับผลงานภายในของ ...
จากสิ่งที่ฉันเข้าใจ Rails จะใคร่ครวญวัตถุเพื่อกำหนดว่ารูปแบบที่แท้จริงนั้นจะเป็นอย่างไร ค่าตัวแปร 'รูปแบบ' ขึ้นอยู่กับวิปัสสนานี้ Rails สามารถทำอะไรได้มากมายด้วยข้อมูลนิดหน่อย คุณจะประหลาดใจกับการ @ @ ง่าย ๆ หรือ: โพสต์จะไป
ตัวอย่างเช่นถ้าฉันมี _user.html.erb ไฟล์บางส่วนที่มีลักษณะเช่นนี้:
_user.html.erb
<li>
<%= link_to user.name, user %>
</li>
จากนั้นเพียงอย่างเดียวในมุมมองดัชนีของฉันจะทำให้ Rails รู้ว่ามันจำเป็นต้องค้นหา 'ผู้ใช้' บางส่วนและทำซ้ำในวัตถุ 'ผู้ใช้' ทั้งหมด:
index.html.erb
<ul class="users">
<%= render @users %>
</ul>
จะแจ้งให้ Rails ทราบว่าจำเป็นต้องค้นหา 'ผู้ใช้' บางส่วนและทำซ้ำผ่านวัตถุ 'ผู้ใช้' ทั้งหมด:
คุณอาจพบว่าการโพสต์บล็อกนี้มีประโยชน์: http://archives.ryandaigle.com/articles/2009/8/6/what-s-new-in-edge-rails-cleaner-restful-controllers-w-respond_with
นอกจากนี้คุณยังสามารถอ่านแหล่งที่มา: https://github.com/rails/rails