【问题标题】:Rails 3, best way to be DRY with radio button labels?Rails 3,使用单选按钮标签干燥的最佳方法?
【发布时间】:2011-06-20 09:20:44
【问题描述】:

假设对于名为“favfood”的整数字段,我们将单选按钮选项表示为

0 indicates "no favorite"
1 indicates "Wine and cheese"
2 indicates "Burger with everything"

在我们的 _edit 视图中,我们显示带有友好标签的单选按钮

在 /show 视图和 /index 视图(以及其他几个地方)上,当我们显示用户偏好时,我们会显示相同的相应长文本。

在 _edit 中将文字字符串放在每个单选按钮旁边,然后提供一些逻辑来根据当前值在 /show 和 /index 等上显示相同的文字字符串似乎是非 DRY。

此外,我们必须重复使用相同的逻辑,即如果 value=1 则显示“第一选择”,如果 value = 2 则显示“第二选择”。

处理单选标签的用户友好标签的“rails-way”是什么,以便标签(以及它们与字段值的关联)被定义一次?

【问题讨论】:

    标签: ruby-on-rails radio-button dry


    【解决方案1】:

    你应该做两件事。一种使用国际化(I18n),以便您的文本存储在您的 en.yml 文件中,您可以使用标签而不是字符串:

    # en.yml zh: no_favorite: '没有最喜欢的' wine_and_cheese: '葡萄酒和奶酪' burger_with_everything: '汉堡什么都有' # 然后你可以像这样翻译标签 I18n.t :no_favorite I18n.t :wine_and_cheese I18n.t :burger_with_everything

    下一步是创建某种散列或类来为您存储和转换整数值。一个简单的数组解决方案可能如下所示:

    选项 = [:no_favorite,:wine_and_cheese,:burger_with_everything]

    然后您可以使用如下选项:

    选定值 = 1 I18n.t OPTIONS[selected_value] # => wine_and_cheese OPTIONS.index :wine_and_cheese # => 1

    此外,如果所选选项是模型值(例如 User#food_preference),您可以定义一个函数来显示该用户的食物偏好:

    类用户 选项 = [:no_favorite,:wine_and_cheese,:burger_with_everything] def display_food_preference I18n.t 选项[food_preference] 结尾 结尾

    【讨论】:

    • 这是一个很好的解决方案,很好地解释了谢谢!
    【解决方案2】:

    我不确定您要在这里做什么,但为什么不将字符串存储在模型中。某样东西:

    class User < ActiveRecord::Base
        def favfood_description
            "bla bla" if favfood == 0
        end
    end
    

    【讨论】:

      猜你喜欢
      • 2016-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多