我有一个模型,包含attibutes名称,标题,描述等。如果名字是由例如天气foracast我要显示在展示模板额外的HTML元素最佳方法 - 视图中的条件
= high_chart("my_id", @chart)
,至极产生一个很好的图表。当页面不是天气预报时,我不想显示图表。
什么是最好的方法?视图中的条件?
我有一个模型,包含attibutes名称,标题,描述等。如果名字是由例如天气foracast我要显示在展示模板额外的HTML元素最佳方法 - 视图中的条件
= high_chart("my_id", @chart)
,至极产生一个很好的图表。当页面不是天气预报时,我不想显示图表。
什么是最好的方法?视图中的条件?
您的问题看起来非常接近Object on Rails中的展示模式。
简单地说,建议的解决方案是将模型包装在使用模型状态(在您的情况下是记录名称)选择的装饰器(或多个装饰器)中。
我无法解释它,以及它在book解释但模式是非常有用,Avdi格林做出了宝石出来的:https://github.com/objects-on-rails/display-case
这就是它!我要去读它......谢谢! – Remco
因为它看起来像你HAML,你可以只使用一个if
修改像这样:
= high_chart("my_id", @chart) if [model.name] == "weather-forecast"
其中[model.name]
被替换为相应的代码。
@Remco,希望你在一段时间之后不会在你的视图中得到太多这样的'if's –
如果你有很多'if's你做错了,应该考虑重构。也就是说,只要条件用于确定应该如何显示信息,视图中的偶然if语句就非常好。即使Rails指南中提供的示例也包含条件。 –
我知道这个答案完全在顶部,但需要考虑的是将您的条件逻辑移到您的视图之外。
与视图演示模式也许会,看到这一点: About presenter pattern in rails. is a better way to do it?
主持人是红宝石的对象,真的能够很容易地进行测试。
虽然在视图内部有很多逻辑真的很难测试。
此外,你想要逻辑隔离,检查你的视图页面内的model.name不是MVC的最佳方式。
你读过那篇关于布局,谐音,佣工? –