class HouseBuyersController < ...
def my_method
# How could I get here the relevant model name, i.e. "HouseBuyer" ?
end
end
ruby-on-rails
ruby-on-rails-3
Misha Moroshko
sumber
sumber
controller_name.sub('_', ' ').titleize
untuk mendapatkan "Pembeli Rumah".new.controller_name.classify.constantize
definisi kelas.Jika pengontrol dan model Anda berada di namespace yang sama, maka yang Anda inginkan adalah
controller_path
memberi Anda namespace;controller_name
tidak.Misalnya, jika pengontrol Anda adalah
kemudian:
sumber
Ini sedikit hack, tetapi jika model Anda dinamai sesuai nama pengontrol Anda, maka:
... akan memberi Anda "HouseBuyer" dalam variabel instance @model_name Anda.
Sekali lagi, ini membuat asumsi besar bahwa "HouseBuyersController" hanya berurusan dengan model "HouseBuyer".
sumber
Untuk ruang nama yang berfungsi:
sumber
Ini tidak mungkin jika Anda menggunakan MVC default, yang tampaknya tidak diikuti oleh kode Anda. Pengontrol Anda sepertinya model tetapi mungkin Anda baru saja mendapatkan tipe di sana. Bagaimanapun, pengontrol dan model pada dasarnya dipisahkan di Rails MVC sehingga pengontrol tidak dapat mengetahui model mana yang dikaitkan dengannya.
Misalnya Anda bisa memiliki model bernama post. Ini dapat memiliki pengontrol posts_controller atau dapat memiliki pengontrol seperti Articles_controller. Rails hanya tahu tentang model ketika Anda menentukan kode sebenarnya di controller seperti
Dalam pengontrol standar rel, tidak ada cara untuk mengetahui modelnya.
sumber
Solusi yang diterima tidak berfungsi untuk saya karena pengontrol dan model saya diberi spasi nama. Sebagai gantinya, saya menemukan metode berikut:
sumber