最佳方法 - 视图中的条件

时间:2012-09-12 15:19:47

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

我有一个名称,标题,描述等的模型。如果名称是例如weather-foracast我想要显示一个额外的html元素

= high_chart("my_id", @chart) 

在show模板中,它会生成一个漂亮的图表。当页面没有天气预报时,我不想显示图表。

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

3 个答案:

答案 0 :(得分:1)

因为它看起来像你的HAML,你可以像这样使用if修饰符:

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

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

答案 1 :(得分:1)

我知道这个答案完全超出了顶部,但需要考虑的是将条件逻辑移到你的观点之外 也许使用View Presenter模式,请看: About presenter pattern in rails. is a better way to do it?

演示者是红宝石物品,可以很容易地进行测试 而在视图中有大量逻辑真的很难测试 此外,您需要隔离逻辑,在视图页面内检查model.name并不是MVC的最佳方式。

答案 2 :(得分:1)

您的问题与Object on Rails中显示的展示模式非常接近。

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

我无法解释它,因为它在book中得到了解释,但是这种模式非常有用,以至于Avdi Grimm从中创造了一个宝石:https://github.com/objects-on-rails/display-case