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
źródło
źródło
controller_name.sub('_', ' ').titleize
aby uzyskać „Kupujący dom”.new.controller_name.classify.constantize
w definicji klasy.Jeśli kontroler i model znajdują się w tej samej przestrzeni nazw, to chcesz
controller_path
daje przestrzeń nazw;controller_name
nie.Na przykład, jeśli twój kontroler to
następnie:
źródło
To trochę hack, ale jeśli twój model nosi nazwę po nazwie kontrolera, to:
... da ci „HouseBuyer” w zmiennej instancji @model_name.
Ponownie, zakłada się, że „HouseBuyersController” obsługuje tylko modele „HouseBuyer”.
źródło
W przypadku działających przestrzeni nazw:
źródło
Nie jest to możliwe, jeśli używasz domyślnego MVC, którego kod nie wydaje się przestrzegać. Twój kontroler wydaje się być modelem, ale może po prostu masz tam typ. W każdym razie kontrolery i modele są zasadniczo oddzielone w Rails MVC, więc kontrolery nie mogą wiedzieć, z którym modelem są skojarzone.
Na przykład możesz mieć model o nazwie post. Może to mieć kontroler post_controller lub może mieć kontroler taki jak artykuły_controller. Railsy wiedzą o modelach tylko wtedy, gdy zdefiniujesz rzeczywisty kod w kontrolerze, taki jak
W standardowych kontrolerach szynowych nie ma sposobu, aby dowiedzieć się, jaki jest model.
źródło
Zaakceptowane rozwiązanie nie zadziałało, ponieważ mój kontroler i model miały przestrzeń nazw. Zamiast tego wymyśliłem następującą metodę:
źródło