ฉันสังเกตเห็นสิ่งต่อไปนี้:
เครื่องยนต์เต็มรูปแบบ
ด้วยเครื่องยนต์เต็มรูปแบบแอปพลิเคชันแม่จะสืบทอดเส้นทางจากเครื่องยนต์ ไม่จำเป็นต้องระบุอะไรในparent_app/config/routes.rb
. การระบุอัญมณีใน Gemfile เพียงพอสำหรับแอปพาเรนต์ในการสืบทอดโมเดลเส้นทางและอื่น ๆ เส้นทางเครื่องยนต์ถูกระบุเป็น:
# my_engine/config/routes.rb
Rails.application.routes.draw do
# whatever
end
ไม่มีการกำหนดเนมสเปซของโมเดลคอนโทรลเลอร์และอื่น ๆ สิ่งเหล่านี้สามารถเข้าถึงได้ทันทีในแอปพลิเคชันหลัก
เครื่องยนต์ที่ติดตั้งได้
เนมสเปซของเครื่องยนต์ถูกแยกโดยค่าเริ่มต้น:
# my_engine/lib/my_engine/engine.rb
module MyEngine
class Engine < Rails::Engine
isolate_namespace MyEngine
end
end
ด้วยเอ็นจิ้นที่ติดตั้งได้เส้นทางจะถูกเนมสเปซและแอพพาเรนต์สามารถรวมฟังก์ชันนี้ไว้ในเส้นทางเดียว:
# my_engine/config/routes.rb
MyEngine::Engine.routes.draw do
#whatever
end
# parent_app/config/routes.rb
ParentApp::Application.routes.draw do
mount MyEngine::Engine => "/engine", :as => "namespaced"
end
โมเดลคอนโทรลเลอร์และอื่น ๆ จะแยกออกจากแอปพลิเคชันหลัก - แม้ว่าตัวช่วยจะสามารถแชร์ได้อย่างง่ายดาย
นี่คือความแตกต่างหลักที่ฉันเห็น บางทีอาจมีคนอื่น? ฉันได้ถามมากกว่าที่นี่แต่ยังไม่ได้รับการตอบสนอง
ความประทับใจของฉันคือเนื่องจากเอนจินเต็มรูปแบบไม่ได้แยกตัวเองออกจากแอปพลิเคชันหลักจึงควรใช้เป็นแอปพลิเคชันแบบสแตนด์อโลนที่อยู่ติดกับแอปหลัก ฉันเชื่อว่าการปะทะกันของชื่ออาจเกิดขึ้นได้
สามารถใช้เครื่องยนต์ที่ติดตั้งได้ในสถานการณ์ที่คุณต้องการหลีกเลี่ยงความขัดแย้งของชื่อและรวมเครื่องยนต์ไว้ภายใต้เส้นทางเดียวในแอปพลิเคชันหลัก ตัวอย่างเช่นฉันกำลังสร้างเครื่องยนต์ตัวแรกที่ออกแบบมาเพื่อการบริการลูกค้า แอปพลิเคชันหลักสามารถรวมฟังก์ชันการทำงานไว้ภายใต้เส้นทางเดียวเช่น:
mount Cornerstone::Engine => "/cornerstone", :as => "help"
หากฉันไม่เข้าใจสมมติฐานใครบางคนโปรดแจ้งให้เราทราบแล้วฉันจะแก้ไขคำตอบนี้ ฉันได้ทำบทความเล็ก ๆ เกี่ยวกับเรื่องนี้ที่นี่ ไชโย!