ความแตกต่างระหว่างเส้นทางการสะสมและเส้นทางสมาชิกในทับทิมบนราง?


278

อะไรคือความแตกต่างระหว่างเส้นทางการสะสมและเส้นทางสมาชิกใน Rails?

ตัวอย่างเช่น,

resources :photos do
  member do
    get :preview
  end
end

กับ

resources :photos do
  collection do
    get :search
  end
end

ฉันไม่เข้าใจ

คำตอบ:


407

เส้นทางที่สมาชิกจะต้องมี ID, เพราะมันทำหน้าที่ในสมาชิก เส้นทางของคอลเลกชันไม่ได้เกิดจากการทำงานกับคอลเลกชันของวัตถุ ดูตัวอย่างเป็นตัวอย่างของเส้นทางสมาชิกเนื่องจากมันทำหน้าที่ (และแสดง) วัตถุเดียว การค้นหาเป็นตัวอย่างของเส้นทางการรวบรวมเพราะมันทำหน้าที่ (และแสดง) การรวบรวมวัตถุ


สิ่งที่เกี่ยวกับการสร้างการกระทำ? ว่าฉันต้องการสร้างทางเลือกเพื่อ 'สร้าง' - มันจะนับเป็นสมาชิกหรือไม่?
digitalWestie

1
ใช่สร้างคือการกระทำของสมาชิก
Theo

1
แต่สิ่งที่เกี่ยวกับการเพิ่ม "รับ" โดยไม่มีบล็อกใด ๆ มันเป็นสมาชิกหรือเส้นทางการเก็บรวบรวม? การทดสอบของฉันแสดงชุดรวม แต่มีชื่อตัวแปร id แตกต่างกัน
lzap

6
คุณแน่ใจเกี่ยวกับการสร้างการกระทำของสมาชิก ไม่มี ID ที่จะผ่าน
George Shaw

6
@YoniGeek ไม่ถูกต้อง. ดูguide.rubyonrails.org/routing.html , 2.7 แหล่งข้อมูลที่ซ้อนกัน สร้างเป็นแอคชันคอลเลกชันเสมอเมื่อคุณเพิ่มลงในคอลเลกชัน โปรดทราบว่าเส้นทางการสร้างที่ตั้งชื่อไว้จะเป็นพหูพจน์เสมอ ในตัวอย่างของคุณคุณกำลังเพิ่มการลงคะแนนใหม่ไปยังชุดของการลงคะแนนที่เป็นสมาชิกของโพสต์ id อ้างถึงโพสต์ของสมาชิกไม่ใช่การรวบรวมการลงคะแนนที่ถูกสร้างขึ้นพา ธ ที่ระบุชื่อจะเป็น posts_votes_url ตัวอย่างเช่น
George Shaw

217
                URL                 Helper                      Description
----------------------------------------------------------------------------------------------------------------------------------
member          /photos/1/preview   preview_photo_path(photo)   Acts on a specific resource so required id (preview specific photo)
collection      /photos/search      search_photos_path          Acts on collection of resources(display all photos)

39
โพสต์ที่มีค่าที่สุด!
aldo.roman.nurena

1
ควรใช้search_photos_pathแทนsearch_photos_urlดังนั้นผู้ใช้จะไม่คิด_pathและ_urlมีความแตกต่างระหว่างทั้งสอง
Joshua Pinter

31

คำตอบของธีโอนั้นถูกต้อง เพื่อประโยชน์ของเอกสารฉันต้องการทราบว่าทั้งสองจะสร้างผู้ช่วยเหลือเส้นทางที่แตกต่างกัน

member {get 'preview'} จะสร้าง:

preview_photo_path(@photo) # /photos/1/preview

collection {get 'search'} จะสร้าง:

search_photos_path # /photos/search

หมายเหตุส่วนใหญ่!


14

1) : การรวบรวม - เพิ่มเส้นทางที่มีชื่อสำหรับการดำเนินการอื่น ๆ ที่ดำเนินการกับการรวบรวม ใช้แฮชของ#{action} => #{method}โดยที่ method คือ:get/:post/:put/:deleteอาร์เรย์ของรายการก่อนหน้าหรือ: ใด ๆ หากวิธีการไม่สำคัญ เส้นทางนี้แผนที่ไปยัง URL เช่นผู้ใช้ / / customers_listกับเส้นทางของcustomers_list_users_url

map.resources: ผู้ใช้: collection => {: customers_list =>: get}

2) :member- เหมือนกับ:collectionแต่สำหรับการกระทำที่ดำเนินการกับสมาชิกที่ระบุ

map.resources: ผู้ใช้,: member => {: inactive =>: post}

มันถือว่าเป็น /users/1;inactive=> [:action => 'inactive', :id => 1]


ตัวอย่างที่ดี คำอธิบายด้านบนอาจดีกว่านี้
hitesh israni
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.