Как применить закон Деметры в рельсах для петли

У меня есть приложение rails, в котором есть модель Users с одним User_profile. Когда я хочу показать нескольких пользователей на странице, я использую цикл рельсов, например:

<% @users.each do |user| %>
  <%= user.user_profile.city %>
<% end %>

Который показывает пользователям город проживания. Однако это не соответствует закону Деметры (или так говорит сборка Дженкинса на моем битбакете). Я мог бы создать область видимости города в своей модели User, чтобы я мог вызвать user.user_profile_city, но я не знаю, является ли это лучшим способом решения этой проблемы, поскольку мне пришлось бы делать это для каждого атрибута user_profile (какой тип таблица user_profile бесполезна). Как Rails может решить эту проблему?

1 ответ

Решение

Вам не нужно добавлять область, вы можете использовать delegate, Добавьте это к вашему User модель:

delegate :city, to: :user_profile

и тогда ваш взгляд становится

<% @users.each do |user| %>
  <%= user.city %>
<% end %>

Проверьте http://api.rubyonrails.org/classes/Module.html для получения более подробной информации.

Другие вопросы по тегам