从嵌套ifs重构为link_to_if

时间:2012-08-28 02:25:53

标签: ruby-on-rails ruby ruby-on-rails-3 refactoring

我在共享视图中有以下if语句:

<% if activity.holder.user.profile_type == "Manager" %>
  DAMANAGER
<% elsif profile == "managers" %>
  <%= link_to activity.holder.name, managers_enterprise_path(activity.holder) %>
<% else %>
  <%= activity.holder.name %>
<% end %>

profile是一个本地字符串变量,它将是"enterprises""managers",具体取决于登录的配置文件!

活动也是#each语句的局部变量


视图仅在具有不同配置文件(Enterprise和Manager)的两个用户之间共享,具有以下约束:

  • 如果经理是活动的所有者,则应显示DAMANAGER

  • 当我看到经理时,除非持有人是经理,否则应显示一个链接以显示拥有此活动的企业。

  • 当我看到企业时,它应该显示,谁拥有活动,持有者名称。没有链接。

所以我努力奋斗,从那里重构,这就是我现在所得到的:

<%= link_to_if (profile == 'managers'), activity.holder.name, managers_enterprise_path(activity.holder) %>

但是这不显示DAMANAGER,而且它显示企业的id等于经理的id,因为它将经理传递给managers_enterprise_path。问题是:

我如何改进?

提前致谢,请告诉我您是否需要更多代码!

1 个答案:

答案 0 :(得分:0)

如果没有if ... else ... end,我没有看到可行的方法。 elsif ... else ... end部分可以替换为link_to_if

<% if activity.holder.user.profile_type == "Manager" %>
  DAMANAGER
<% else %>
  <%= link_to_if profile == "managers", activity.holder.name, managers_enterprise_path(activity.holder) %>
<% end %>