我应该如何重构复杂的 If else block in view?

Posted

技术标签:

【中文标题】我应该如何重构复杂的 If else block in view?【英文标题】:How should I refactor complicated If else block in view? 【发布时间】:2012-08-14 18:32:01 【问题描述】:

我认为有以下代码:

# panel.html.erb
<% if content.content_type == "image" && content.content_image_url =~ URI::ABS_URI %>
  <%= image_tag content.content_image.pinboard_thumb %>
<% elsif content.content_image? == false && content.content_value =~ URI::ABS_URI %>
  <%= image_tag content.content_value %>
<% else %>
  <%= auto_link content.content_value %>
<% end %>

我在想我应该把这个逻辑从 if else 块移到哪里。如何做到这一点 Rails 方式。把它移给助手??

或者是更好的方法?下面的代码不起作用。

【问题讨论】:

【参考方案1】:

是的,帮助器是正确的地方,因为代码似乎只与渲染有关。所以那里没有业务逻辑。如果您发现自己在助手中添加了很多类似的东西,您可以查看http://github.com/jcasimir/draper,它是一个实现演示者模式的 gem。

【讨论】:

以上是关于我应该如何重构复杂的 If else block in view?的主要内容,如果未能解决你的问题,请参考以下文章

重构手法之简化条件表达式

学习重构-简化条件表达式

重构 if else 语句

又臭又长的if...else太多了,不知道如何消除?

重构嵌套的 if-else 以处理横切关注点,例如日志记录

浅谈代码重构与优化