Rails 4-Simple Form如何保存key和display value

Rails 4 -Simple Form how to save key and display value

我正在尝试在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 层。

我怎样才能使这个工作?

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

一个简单的解决方案是使用 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] }