【发布时间】:2009-09-08 15:14:50
【问题描述】:
我有一个 Rails 表单,用于编辑特定类的对象。表单上的标签需要根据正在编辑的特定对象而略有不同。
执行此操作的明显方法是向模型对象添加实例方法以返回该对象的适当标签。但是,这似乎是将视图的部分实现放在我的 Rails 项目的模型文件夹中,这似乎不正确。
有没有更好的方法来做到这一点?
【问题讨论】:
标签: ruby-on-rails model-view-controller
我有一个 Rails 表单,用于编辑特定类的对象。表单上的标签需要根据正在编辑的特定对象而略有不同。
执行此操作的明显方法是向模型对象添加实例方法以返回该对象的适当标签。但是,这似乎是将视图的部分实现放在我的 Rails 项目的模型文件夹中,这似乎不正确。
有没有更好的方法来做到这一点?
【问题讨论】:
标签: ruby-on-rails model-view-controller
我的一般准则是模型中的文本很好,除非它包含标记。如果文本包含标记,则它属于帮助程序。
【讨论】:
不确定我是否完全理解,但您似乎可以为此提供帮助方法。
【讨论】:
您将所有标签放在本地化文件中(即使您只有英文),然后从那里查询请参阅i18n guide,第 5.1 节
如果您使用像formtastic 这样的表单生成插件,它可以让您在文件上定义标签和表单提示(来自自述文件):
2. Add some cool label-translations/variants (config/locale/en.yml):
en:
formtastic:
labels:
post:
title: "Choose a title..."
body: "Write something..."
hints:
post:
title: "Choose a good title for you post."
body: "Write something inspiring here."
【讨论】:
最好的方法不是使用视图助手吗?
例如:
def modified_label_tag(obj, field); .... code to generate label_tag; end
将表示逻辑保留在模型之外,将业务逻辑保留在视图之外。
无论你做什么,都不要覆盖 label_tag!
即使你有一个子类,也有关系吗?
例如:
label_class = case obj.class
when SubClassOfModel
'foo'
...
end
【讨论】: