Раскрыть функцию в ruby on rails

#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

Источник: https://github.com/voxdolo/decent_exposure

Комментарии:

1. ссылка на 9-минутное видео — это не ответ

Ответ №2:

Это метод из драгоценного камня Decent Exposure. Вы можете посмотреть скринкаст, который Райан Бейтс сделал для нее на Railscasts. Это действительно отличная жемчужина. Я использую ее в своем приложении. Это значительно сокращает избыточность на уровне контроллера.

Ответ №3:

expose не является частью Rails, она взята из decent_exposure gem.


Это не ответ на вопрос. Я просто хочу сделать мир Rails немного лучше, и я надеюсь, что кто-нибудь прочтет это.

Пожалуйста, дважды подумайте, прежде чем использовать expose . Вы должны использовать ее только в том случае, если вы на 100% уверены, что используете ее правильно, и это действительно улучшает код. Внимательно прочитайте документацию!

Один из проектов, над которым я работал, стал неуправляемым из-за тонны expose встроенных контроллеров, которые заменили не только все @instance_variables переданные представления, но и множество бизнес-логики и большинство вспомогательных методов.

При использовании expose неясно, в каких действиях контроллера и в каких представлениях она используется. Неопытные разработчики объединяют данные и логику для нескольких действий и нескольких представлений в одном expose блоке. Это кошмар.

Поверьте мне, expose это действительно разрушает проекты, если не используется должным образом.