【问题标题】:Rails 4 -Simple Form how to save key and display valueRails 4 - 简单表单如何保存键和显示值
【发布时间】:2016-04-11 04:36:16
【问题描述】:

我正在尝试在 Rails 4 中制作应用程序。我使用简单的表单。

我的模型中有一个名为“self_governance”的属性。

我编写了一个辅助方法,以便我可以定义 5 个级别,这些级别可以存储在此属性中,但作为选项显示给用户(而不是数字 1 .. 5)。

在我的助手中,我有:

module PreferencesHelper

    def self_gov_selector
        [
            [ 'tier 1','1'],
            [ 'tier 2','2'],
            [ 'tier 3','3'],
            [ 'tier 4','4'],
            [ 'tier 5','5'],
        ]
    end

在我的表格中,我有:

<%= f.input :self_governance, :label => "Select your tier", collection: self_gov_selector %>

然后在我的节目中,我试图弄清楚如何显示“tier 1”而不是“1”。

我试过了:

<%= @preference.self_governance %>

<%= @preference.self_gov_selector %>

我找不到任何有效的方法。它们都在视图中显示 1 而不是第 1 层。

我怎样才能做到这一点?

【问题讨论】:

    标签: ruby-on-rails simple-form key-value


    【解决方案1】:

    表单发布的params 只会包含数组中的第二个值,因此您可能会将值作为整数存储在数据库表中。

    一个简单的解决方案是使用enum 将您存储的整数映射到它们所代表的值:

    在您的偏好模型中:

    enum self_governance: {
                              tier_1: 1,
                              tier_2: 2,
                              tier_3: 3,
                              tier_4: 4,
                              tier_5: 5
                            }
    

    然后相应地更新您的视图:

    <%= @preference.self_governance.try(:humanize) %>
    

    编辑:

    这种方法的另一个好处是你可以用直接调用枚举来替换你的辅助方法:

    f.input :self_governance, as: :select, label: "your label", collection: Preference.self_governances.map { |key, val| [key.humanize, val] }
    

    【讨论】:

    • 实际上 - 当我尝试这个时,我得到这个错误: undefined method `self_governance' for #<0x007fde5b9fb500>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    相关资源
    最近更新 更多