我有一个名称,标题,描述等的模型。如果名称是例如weather-foracast我想要显示一个额外的html元素
= high_chart("my_id", @chart)
在show模板中,它会生成一个漂亮的图表。当页面没有天气预报时,我不想显示图表。
最好的方法是什么?视野中的条件?
答案 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