我有一个带有名称、标题、描述等的模型。如果名称是例如 weather-foracast 我想显示一个额外的 html 元素
= high_chart("my_id", @chart)
在显示模板中,它会生成一个漂亮的图表。当页面不是天气预报时,我不想显示图表。
最好的方法是什么?视图中的条件?
我有一个带有名称、标题、描述等的模型。如果名称是例如 weather-foracast 我想显示一个额外的 html 元素
= high_chart("my_id", @chart)
在显示模板中,它会生成一个漂亮的图表。当页面不是天气预报时,我不想显示图表。
最好的方法是什么?视图中的条件?
由于看起来您是 HAML,if
因此您可以使用如下修饰符:
= high_chart("my_id", @chart) if [model.name] == "weather-forecast"
where[model.name]
替换为适当的代码。
我知道这个答案完全是多余的,但是要考虑的是将您的条件逻辑移到您的视图之外。
也许与 View Presenter 模式一起使用,请参阅:
关于 rails 中的 Presenter 模式。有更好的方法吗?
Presenter 是 ruby 对象,可以很容易地进行测试。
而在视图中拥有大量逻辑确实很难测试。
此外,您希望逻辑隔离,在视图页面中检查 model.name 并不是 MVC 的最佳方式。
您的问题看起来非常接近Object on Rails中提出的展览模式。
简单地说,提出的解决方案是将模型包装在使用模型状态(在您的情况下为记录名称)选择的装饰器(或多个装饰器)中。
我无法像书中解释的那样解释它,但 Pattern 非常有用,以至于 Avdi Grimm 用它制作了一个宝石:https ://github.com/objects-on-rails/display-case