2012-09-12 56 views
0

我有一个模型,包含attibutes名称,标题,描述等。如果名字是由例如天气foracast我要显示在展示模板额外的HTML元素最佳方法 - 视图中的条件

= high_chart("my_id", @chart) 

,至极产生一个很好的图表。当页面不是天气预报时,我不想显示图表。

什么是最好的方法?视图中的条件?

+0

你读过那篇关于布局,谐音,佣工? –

回答

1

您的问题看起来非常接近Object on Rails中的展示模式。

简单地说,建议的解决方案是将模型包装在使用模型状态(在您的情况下是记录名称)选择的装饰器(或多个装饰器)中。

我无法解释它,以及它在book解释但模式是非常有用,Avdi格林做出了宝石出来的:https://github.com/objects-on-rails/display-case

+0

这就是它!我要去读它......谢谢! – Remco

1

因为它看起来像你HAML,你可以只使用一个if修改像这样:

= high_chart("my_id", @chart) if [model.name] == "weather-forecast" 

其中[model.name]被替换为相应的代码。

+0

@Remco,希望你在一段时间之后不会在你的视图中得到太多这样的'if's –

+0

如果你有很多'if's你做错了,应该考虑重构。也就是说,只要条件用于确定应该如何显示信息,视图中的偶然if语句就非常好。即使Rails指南中提供的示例也包含条件。 –

1

我知道这个答案完全在顶部,但需要考虑的是将您的条件逻辑移到您的视图之外。
与视图演示模式也许会,看到这一点: About presenter pattern in rails. is a better way to do it?

主持人是红宝石的对象,真的能够很容易地进行测试。
虽然在视图内部有很多逻辑真的很难测试。
此外,你想要逻辑隔离,检查你的视图页面内的model.name不是MVC的最佳方式。