apa cara yang benar untuk menambahkan kelas ke pengontrol di Rails?

Jika saya perlu menambahkan kelas (khusus proyek) ke pengontrol saya di Rails, apa cara/tempat yang benar untuk meletakkan dan "menyertakan" mereka/di sana file .rb? (kutipan untuk: bukan kata kunci ruby ​​​​yang disertakan)

Saya baru mengenal Rails, dan tidak menemukan cara yang benar. LIB terdengar seperti perpustakaan umum lainnya dan - apa yang telah saya pelajari - tidak dimuat ulang secara default dalam mode dev.

tentu, saya bisa memasukkan semuanya ke controler.rb, tapi ...


jawaban untuk saya:

Pertama: tidak ada aturan, jika Anda ingat (atau belajar seperti saya) aturan Rails: NameOfCla -> name_of_cla(.rb) ‹-- tidak menggunakan kelas sebagai kata untuk kejelasan

beri nama kelas Anda sesuka Anda:

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

taruh di file extend_con.rb, tunggu penjelasan pathnya ya. jika Anda menamai kelas Anda 'MYGreatThing' itu akan menjadi 'm_y_great_thing' (jangan pernah mengujinya), jadi hindari karakter Cina

jika pengontrol Anda menggunakan

@letssee=ExtendCon.new

rails mempelajari kelas dan file itu (extend_con) sendiri. saya masih tidak tahu apakah server perlu dihidupkan ulang. (pertama kali)

pilih jalur untuk meletakkan file: (Saya lebih suka cara Daves) app/myexten atau apa pun yang Anda suka, menjadikannya 'aplikasi' khusus dan masih berbeda dengan 'sesuatu' rel standar

jika Anda tidak malas seperti saya (saya taruh di aplikasi/pengendali) masukkan jalur yang Anda pilih ke config/application.rb suka (komentar ada untuk menemukannya)

# 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)   

yang ini berfungsi untuk saya di semua mode termasuk "pengembang" dan saya tidak perlu memasukkan barang-barang "milik saya" ke dalam app/lib


person halfbit    schedule 25.07.2013    source sumber


Jawaban (2)


Tergantung.

Saya cenderung memasukkan kode perpustakaan yang digunakan secara eksplisit (misalnya, dipakai, disuntikkan, dll. ke dalam artefak tingkat aplikasi) ke dalam app/xxx di mana xxx menandakan "jenis" sesuatu, seperti decorators, services, dll.

Barang ajaib cenderung berakhir di lib, seperti patch monyet, artefak tingkat arsitektur, dan sebagainya.

Kode di mana saja dapat ditambahkan ke jalur pemuatan otomatis, diperlukan secara otomatis oleh penginisialisasi, dll.

person Dave Newton    schedule 25.07.2013
comment
Mengapa tidak ada sesuatu seperti Rails tambahkan kelas[file] [dalam grup] [dll], itu kedengarannya ketat bagi saya - person halfbit; 25.07.2013
comment
@RolandMayer Mungkin karena tidak ada alasan untuk bersikap seketat itu; IMO Rails tidak boleh terlalu berpendirian tentang bagaimana kode Anda diatur. - person Dave Newton; 25.07.2013
comment
maksud Anda, saya masih berjuang dengan, apa yang (secara otomatis) dimuat ulang per permintaan (dalam mode pengembang) dan apa yang tidak, jadi saya pikir memberi tahu RAILS lihat, ambil yang ini juga, akan menjadi ide - person halfbit; 25.07.2013
comment
@RolandMayer Bukankah itu gunanya config.autoload_paths? - person Dave Newton; 25.07.2013

Rails 4 dilengkapi dengan direktori internal untuk pengontrol yang disebut keprihatinan. Anda bisa mencoba menggunakannya.

app/controlls/concerns

Jika Anda memiliki concerns/foo_bar.rb, sertakan sebagai berikut:

class FooController < ApplicationController
  include FooBar
end

Model juga memiliki direktori kekhawatirannya sendiri. Saya menemukan pendekatan ini berguna, dan dapat diterapkan pada Rails 3. Anda hanya perlu menambahkan direktori ke jalur pemuatan Anda.

person Mohamad    schedule 25.07.2013
comment
Saya masih merasa, bahwa rel 'tambah kelas ...' akan ketat, meskipun dave di atas memiliki pendapat lain - person halfbit; 26.07.2013