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
Миша Морошко
источник
источник
controller_name.sub('_', ' ').titleize
получить «Покупателей жилья».new.controller_name.classify.constantize
в определении класса.Если ваш контроллер и модель находятся в одном пространстве имен, то вам нужно
controller_path
дает вам пространство имен;controller_name
нет.Например, если ваш контроллер
затем:
источник
Это немного похоже на взлом, но если ваша модель названа в честь имени вашего контроллера, тогда:
... даст вам "HouseBuyer" в вашей переменной экземпляра @model_name.
Опять же, здесь делается огромное предположение, что HouseBuyersController имеет дело только с моделями HouseBuyer.
источник
Для работающих пространств имен:
источник
Это невозможно, если вы используете MVC по умолчанию, которому ваш код не следует. Ваш контроллер кажется моделью, но, может быть, у вас только что есть тип. В любом случае контроллеры и модели в Rails MVC принципиально разделены, поэтому контроллеры не могут знать, с какой моделью они связаны.
Например, у вас может быть модель с именем post. Это может быть контроллер posts_controller или такой контроллер, как article_controller. Rails знает о моделях только тогда, когда вы определяете фактический код в контроллере, например
В стандартных контроллерах rails нет возможности узнать, что это за модель.
источник
Принятое решение не сработало для меня, поскольку мой контроллер и модель были помещены в пространство имен. Вместо этого я придумал следующий метод:
источник