【问题标题】:Is it OK to put UI text in Rails model files?可以将 UI 文本放在 Rails 模型文件中吗?
【发布时间】:2009-09-08 15:14:50
【问题描述】:

我有一个 Rails 表单,用于编辑特定类的对象。表单上的标签需要根据正在编辑的特定对象而略有不同。

执行此操作的明显方法是向模型对象添加实例方法以返回该对象的适当标签。但是,这似乎是将视图的部分实现放在我的 Rails 项目的模型文件夹中,这似乎不正确。

有没有更好的方法来做到这一点?

【问题讨论】:

    标签: ruby-on-rails model-view-controller


    【解决方案1】:

    我的一般准则是模型中的文本很好,除非它包含标记。如果文本包含标记,则它属于帮助程序。

    【讨论】:

      【解决方案2】:

      不确定我是否完全理解,但您似乎可以为此提供帮助方法。

      【讨论】:

      • 助手会一直工作,直到我决定对对象进行子类化,然后它变得非常混乱。
      【解决方案3】:

      您将所有标签放在本地化文件中(即使您只有英文),然后从那里查询请参阅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."
      

      【讨论】:

        【解决方案4】:

        最好的方法不是使用视图助手吗?

        例如:

        def modified_label_tag(obj, field); .... code to generate label_tag; end
        

        将表示逻辑保留在模型之外,将业务逻辑保留在视图之外。

        无论你做什么,都不要覆盖 label_tag!

        即使你有一个子类,也有关系吗?

        例如:

        label_class = case obj.class
        when SubClassOfModel
        'foo'
        ...
        end
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-12-17
          • 1970-01-01
          • 1970-01-01
          • 2016-05-22
          • 1970-01-01
          • 1970-01-01
          • 2023-04-04
          相关资源
          最近更新 更多