#ruby-on-rails-3
#ruby-on-rails-3
Вопрос:
Я смотрю на приложение rails, и в верхней части каждого контроллера есть блок кода, который выглядит примерно так
expose(:var) {Model.find params[:var_id]}
Я прекрасно понимаю, что находится внутри блока, но…
Я не могу найти никакой документации о том, что делает функция expose, откуда она берется, или что-либо еще, что я пробовал искать в проекте и использовать документы rails с возможностью поиска.
Я хотел бы знать, что он делает, может кто-нибудь, пожалуйста, рассказать мне или указать на документы.
Комментарии:
1. Это звучит как обычай, не относящийся к rails. Вы искали в application_controller что-нибудь определяющее
expose
?2. да, глобальный поиск
def expose
выдает ноль
Ответ №1:
Вероятно, это ссылка на decent_exposure
драгоценный камень. Вы можете узнать больше об этом здесь: http://railscasts.com/episodes/259-decent-exposure
Комментарии:
1. ссылка на 9-минутное видео — это не ответ
Ответ №2:
Это метод из драгоценного камня Decent Exposure. Вы можете посмотреть скринкаст, который Райан Бейтс сделал для нее на Railscasts. Это действительно отличная жемчужина. Я использую ее в своем приложении. Это значительно сокращает избыточность на уровне контроллера.
Ответ №3:
expose
не является частью Rails, она взята из decent_exposure
gem.
Это не ответ на вопрос. Я просто хочу сделать мир Rails немного лучше, и я надеюсь, что кто-нибудь прочтет это.
Пожалуйста, дважды подумайте, прежде чем использовать expose
. Вы должны использовать ее только в том случае, если вы на 100% уверены, что используете ее правильно, и это действительно улучшает код. Внимательно прочитайте документацию!
Один из проектов, над которым я работал, стал неуправляемым из-за тонны expose
встроенных контроллеров, которые заменили не только все @instance_variables
переданные представления, но и множество бизнес-логики и большинство вспомогательных методов.
При использовании expose
неясно, в каких действиях контроллера и в каких представлениях она используется. Неопытные разработчики объединяют данные и логику для нескольких действий и нескольких представлений в одном expose
блоке. Это кошмар.
Поверьте мне, expose
это действительно разрушает проекты, если не используется должным образом.