0

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

= high_chart("my_id", @chart) 

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

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

4

3 回答 3

1

由于看起来您是 HAML,if因此您可以使用如下修饰符:

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

where[model.name]替换为适当的代码。

于 2012-09-12T15:25:14.320 回答
1

我知道这个答案完全是多余的,但是要考虑的是将您的条件逻辑移到您的视图之外。
也许与 View Presenter 模式一起使用,请参阅: 关于 rails 中的 Presenter 模式。有更好的方法吗?

Presenter 是 ruby​​ 对象,可以很容易地进行测试。
而在视图中拥有大量逻辑确实很难测试。
此外,您希望逻辑隔离,在视图页面中检查 model.name 并不是 MVC 的最佳方式。

于 2012-09-12T16:42:39.773 回答
1

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

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

我无法像书中解释的那样解释它,但 Pattern 非常有用,以至于 Avdi Grimm 用它制作了一个宝石:https ://github.com/objects-on-rails/display-case

于 2012-09-12T17:57:08.497 回答