วิธีที่ถูกต้องในการเพิ่มคลาสให้กับคอนโทรลเลอร์ใน Rails คืออะไร?

หากฉันต้องการเพิ่มคลาส (เฉพาะโปรเจ็กต์) ให้กับคอนโทรลเลอร์ของฉันใน Rails วิธี/สถานที่ที่ถูกต้องในการวางและ "รวม" ไฟล์เหล่านั้น/มี .rb คืออะไร (เครื่องหมายคำพูดสำหรับ: ไม่ใช่คำหลัก Ruby รวม)

ฉันยังใหม่กับ Rail และไม่พบ วิธี วิธีที่ถูกต้อง LIB ดูเหมือนกับห้องสมุดสาธารณะอื่นๆ และ - สิ่งที่ฉันได้เรียนรู้ - จะไม่โหลดซ้ำตามค่าเริ่มต้นในโหมด dev

แน่นอน ฉันสามารถใส่ทั้งหมดลงใน controler.rb ได้ แต่ ...


คำตอบสำหรับฉัน:

ประการแรก: ไม่มีกฎเกณฑ์ใดๆ หากคุณจำไว้ (หรือเรียนรู้เหมือนฉัน) กฎของราง: NameOfCla -> name_of_cla(.rb) ‹-- ไม่ใช้คลาสเป็นคำเพื่อการชี้แจง

ตั้งชื่อชั้นเรียนของคุณตามที่คุณต้องการ:

class ExtendCon #<--- not using controller here for clearence
    ....

ใส่ไว้ในไฟล์ extend_con.rb โปรดรอคำอธิบายเส้นทาง ถ้าคุณตั้งชื่อคลาสของคุณว่า 'MYGreatThing' มันจะเป็น 'm_y_great_thing' (อย่าทดสอบเลย) ดังนั้นให้หลีกเลี่ยงตัวอักษรจีน

หากคอนโทรลเลอร์ของคุณใช้

@letssee=ExtendCon.new

Rails เรียนรู้คลาสและไฟล์นั้น (extend_con) ด้วยตัวมันเอง ฉันยังไม่ทราบว่าจำเป็นต้องรีสตาร์ทเซิร์ฟเวอร์หรือไม่ (ครั้งแรก)

เลือกเส้นทางที่จะใส่ไฟล์: (ฉันชอบวิธีของ Daves) app/myexten หรือสิ่งที่คุณต้องการทำให้เป็น 'แอป' เฉพาะเจาะจงและยังคงแยกความแตกต่างจาก 'สิ่งของ' ของรางมาตรฐาน

หากคุณไม่ได้ขี้เกียจเหมือนฉัน (ฉันใส่ไว้ในแอป/ผู้ควบคุม) ให้ใส่เส้นทางที่คุณเลือกไว้ใน config/application.rb ไลค์ (มีความคิดเห็นเพื่อค้นหามัน)

# Custom directories with classes and modules you want to be autoloadable.
# config.autoload_paths += %W(#{config.root}/app/controllers)
config.autoload_paths += %W(#{config.root}/app/myexten)   

อันนี้ใช้ได้กับฉันในทุกโหมดรวมถึง "นักพัฒนา" และฉันไม่จำเป็นต้องใส่สิ่งต่าง ๆ "ของฉันเอง" ใน app/lib


person halfbit    schedule 25.07.2013    source แหล่งที่มา


คำตอบ (2)


มันขึ้นอยู่กับ.

ฉันมักจะใส่รหัสไลบรารีที่ใช้อย่างชัดเจน (เช่น สร้างอินสแตนซ์ ฉีด ฯลฯ ลงในสิ่งประดิษฐ์ระดับแอป) ลงใน app/xxx โดยที่ xxx หมายถึง "ประเภท" ของสิ่งต่าง ๆ เช่น decorators, services เป็นต้น

ของวิเศษมักจะจบลงที่ lib เช่น แผ่นลิง สิ่งประดิษฐ์ระดับสถาปัตยกรรม และอื่นๆ

คุณสามารถเพิ่มโค้ดได้ทุกที่ลงในเส้นทางการโหลดอัตโนมัติ ซึ่งจำเป็นต้องใช้โดยอัตโนมัติโดยเครื่องมือเริ่มต้น ฯลฯ

person Dave Newton    schedule 25.07.2013
comment
เหตุใดจึงไม่มีบางอย่างเช่น Rails add class[file] [in group] [etc] นั่นฟังดูเข้มงวดสำหรับฉัน - person halfbit; 25.07.2013
comment
@RolandMayer อาจเป็นเพราะไม่มีเหตุผลที่ดีที่จะเข้มงวดขนาดนั้น IMO Rails ไม่ควรแสดงความคิดเห็นเกี่ยวกับวิธีการจัดระเบียบโค้ดของคุณ - person Dave Newton; 25.07.2013
comment
ประเด็นของคุณ ฉันยังคงต่อสู้กับอะไร (โดยอัตโนมัติ) reloded ตามคำขอ (ในโหมด dev) และอะไรที่ไม่ใช่ ดังนั้นฉันคิดว่าการบอก RAILS ดู เอาอันนี้ไปด้วย จะเป็นความคิด - person halfbit; 25.07.2013
comment
@RolandMayer นั่นไม่ใช่สิ่งที่ config.autoload_paths มีไว้เพื่อเหรอ? - person Dave Newton; 25.07.2013

Rails 4 มาพร้อมกับไดเร็กทอรีภายในสำหรับคอนโทรลเลอร์ที่เรียกว่าข้อกังวล คุณสามารถลองใช้สิ่งนั้นได้

app/controlls/concerns

หากคุณมี concerns/foo_bar.rb คุณจะต้องรวมไว้ดังนี้:

class FooController < ApplicationController
  include FooBar
end

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

person Mohamad    schedule 25.07.2013
comment
ฉันยังรู้สึกว่าราง 'เพิ่มคลาส ...' จะเข้มงวดแม้ว่าเดฟด้านบนจะมีความคิดเห็นอื่น - person halfbit; 26.07.2013