【问题标题】:Can you change label display names when using simple-form in rails?在 rails 中使用 simple-form 时可以更改标签显示名称吗?
【发布时间】:2012-12-02 03:00:42
【问题描述】:

我在 rails 中使用 simple-form,我想知道是否有办法改变集合对象的显示方式。例如我有这样的东西

<%= f.input :lang, :label => "Language", :collection => [ "en", "es, "zh", "fr" ] %>

我希望它向用户显示为“英语西班牙语”等,而不是显示为“en es zh”等。反正有做那种事吗?

提前致谢。

【问题讨论】:

    标签: ruby-on-rails simple-form


    【解决方案1】:

    您也可以使用以下方式:

    在模型中:

        LANGUAGES = {'English' => 'en','French' => 'fr'}
    

    在视图中:

        <%= f.input :lang, :label => "Language", :collection => Model::LANGUAGES %>
    

    【讨论】:

      【解决方案2】:

      我猜标签是“English”,值是“en”;你可以这样做:

      将数据存储在模型中(推荐)或进行哈希:

      @data = Language.all
      

      在视图中使用 label_methodvalue_method

      <%= f.input :lang, :label => "Language", :collection => @data, :label_method => :name, :value_method => :value %>
      

      查看https://github.com/plataformatec/simple_form中的Collections部分

      【讨论】:

        【解决方案3】:

        另一种选择是添加助手

        def languages_display
          [
            ["English", "en"],
            ["Spanish", "sn"],
            ["French", "fr"],
          ]
        end
        

        然后从输入字段调用你的助手:

        <%= f.input :state, :collection => languages_display %>
        

        然后在您的显示视图中,您可以调用以下帮助程序,以便它显示英语而不是您在数据库中的 en:

        def show_language(language)
          {
            "en" => 'English',
            "sp" => 'Spanish',
            "fr" => 'French'
          }[language]
        end
        

        【讨论】:

          【解决方案4】:
           <%= f.input :lang, label: "Language", collection: [ [ "English", "en" ], [ "Spanish", "es" ], [ "French", "fr" ] ] %>
          

          这在上面工作,使用嵌套数组。此外,它以最新的轨道和简单的形式使用。

          【讨论】:

            【解决方案5】:

            我的方法是将整个集合放在语言环境 yml 文件(en.yml)中:

            #RAILSROOT/locales/en.yml
            en:
              collections:
                languages: 
                  - - en
                    - English
                  - - de
                    - Deutch
            

            在视图中只写:

            <%= f.input :lang, :label => "Language", :collection => t("collections.languages") %>
            

            我经常使用这个,所以我什至用扩展 I18n (https://github.com/rstgroup/i18n-structure) 的辅助函数编写了 gem,并且你可以在 gemfile 中编写(注意“tc”辅助函数)

            <%= f.input :lang, :label => "Language", :collection => tc(:languages) %>
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2019-06-15
              • 2021-03-07
              • 2011-04-26
              • 1970-01-01
              • 1970-01-01
              • 2015-06-09
              • 2018-01-11
              相关资源
              最近更新 更多