如何在 rails for 循环中应用得墨忒耳定律
How to apply law of demeter in a rails for loop
我有一个 rails 应用程序,它的用户模型有一个 User_profile。当我想在一个页面上显示多个用户时,我使用 rails 循环,例如:
<% @users.each do |user| %>
<%= user.user_profile.city %>
<% end %>
显示用户居住城市。然而,这并不遵循得墨忒耳法则(或者我的 bitbucket 上的詹金斯告诉我)。我可以在我的用户模型上创建一个城市范围,以便我可以调用 user.user_profile_city,但我不知道这是否是解决此问题的最佳方法,因为我必须为每个 user_profile 执行此操作属性(哪一种使得 user_profile table 无用)。 Rails 解决这个问题的方法是什么?
不需要添加作用域,可以使用delegate
。将此添加到您的 User
模型中:
delegate :city, to: :user_profile
然后你的视图变成
<% @users.each do |user| %>
<%= user.city %>
<% end %>
查看 http://api.rubyonrails.org/classes/Module.html#method-i-delegate 了解更多详情。
我有一个 rails 应用程序,它的用户模型有一个 User_profile。当我想在一个页面上显示多个用户时,我使用 rails 循环,例如:
<% @users.each do |user| %>
<%= user.user_profile.city %>
<% end %>
显示用户居住城市。然而,这并不遵循得墨忒耳法则(或者我的 bitbucket 上的詹金斯告诉我)。我可以在我的用户模型上创建一个城市范围,以便我可以调用 user.user_profile_city,但我不知道这是否是解决此问题的最佳方法,因为我必须为每个 user_profile 执行此操作属性(哪一种使得 user_profile table 无用)。 Rails 解决这个问题的方法是什么?
不需要添加作用域,可以使用delegate
。将此添加到您的 User
模型中:
delegate :city, to: :user_profile
然后你的视图变成
<% @users.each do |user| %>
<%= user.city %>
<% end %>
查看 http://api.rubyonrails.org/classes/Module.html#method-i-delegate 了解更多详情。