如何在导轨中应用demeter定律

时间:2015-12-08 15:12:31

标签: ruby-on-rails law-of-demeter

我有一个rails应用程序,其用户模型有一个User_profile。当我想在页面上显示多个用户时,我使用了如下的rails循环:

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

显示用户所在城市。然而,这并不遵循得墨忒耳的规律(或者我的bitbucket建立的jenkins告诉我)。我可以在我的用户模型上创建一个城市范围,以便我可以调用user.user_profile_city,但我不知道这是否是解决此问题的最佳方法,因为我必须为每个user_profile属性执行此操作(哪种类型)使user_profile表无用)。 Rails解决这个问题的方法是什么?

1 个答案:

答案 0 :(得分:2)

您不需要添加范围,您可以使用delegate。将其添加到您的User模型中:

delegate :city, to: :user_profile

然后您的观点变为

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

查看http://api.rubyonrails.org/classes/Module.html#method-i-delegate了解详情。