【问题标题】:In a Rails form, can select options be saved to the database as a hash?在 Rails 表单中,选择选项可以作为散列保存到数据库吗?
【发布时间】:2016-10-02 21:56:32
【问题描述】:

假设我的表单中有以下用于Gate 对象的选择框:

f.select(:type_use, options_for_select([['Enter & Exit', 8],
                                        ['Only Enter', 4],
                                        ['Only Exit', 4],
                                        ['Only Enter for visitors', 2],
                                        ['Only Exit for visitors', 2]],
                                        @gate.type_use),
                                        { :include_blank => '- select -' },
                                        { :class => 'form-control'})

这些选项永远不会改变。像 4 和 8 这样的整数代表每天的周期数,我稍后使用这些整数进行计算。但是,我仍然希望为每个整数保留正确的字符串标签以在我的视图中使用,因此我可以证明门具有“仅退出”类型的使用,例如。

那么,是否可以将选择选项保存为哈希,或者 Rails 是否有其他方法可以将整数映射到字符串以在我的应用程序中使用?

以前我一直在做的只是保存字符串值,然后使用if 语句,在进行计算之前根据字符串值手动为变量分配相应的整数。但我还没有找到一种更有效、更优雅的方式来做到这一点。

在我的研究中,我确实找到了有关 Enums 的信息,但我认为它不适用于这种情况,因为我有重复的整数,而 Enums 对我来说更像是顺序索引。此外,关于选择框中的哈希的其他问题似乎围绕着使用哈希填充 select 选项,而不是保存为哈希

【问题讨论】:

  • 鉴于您说“这些选项永远不会改变”,为什么要将其存储在数据库中...我可以建议在某些初始化程序中定义一个常量吗?例如常量.rb?
  • 不确定我是否完全遵循...每个 gate 都会选择这 5 个选项之一。该选择需要保存。我不必同时保存字符串和整数值,这是真的。但我至少需要保存一个。
  • hstore 可能是您想要在下面做的 RE。我只是说我不明白为什么你想将字符串存储在数据库中,而你可能只是有某种常量告诉你“哦,2 意味着'只为访客输入'”,但问题是你似乎有多个 ID 映射到同一个字符串...

标签: ruby-on-rails ruby


【解决方案1】:

您可以在要保存的Model 上使用Serialize 来保存Hash 和Array Hash 或Array

例如:

class User < Active::Record

  serialize :data, Hash           # for hash
  serialize :other_data, Array    # for array

end

postgres 中还有一个名为hstore 的DataType,可以让你保存Hash 数据,然后可以在Hash 中执行搜索和索引项目

要使用它,您首先必须启用 hstore 扩展,然后在迁移中使用它

.... add_column :data_set, :hstore, default: {}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-04
  • 2019-01-19
相关资源
最近更新 更多