1

我有一个模型字段,它是一个数组。我可以毫无问题地存储它并从数据库中检索它。

当用户创建或编辑此数组时,我希望他们看到它并将其编辑为逗号分隔的列表。我选择存储为数组并让用户与列表交互背后有合理的理由,而且他们很少编辑包含列表/数组的记录。99% 的时间他们只编辑该记录一次,当他们创建它时,虽然他们可能会查看很多次,但这些查看时间记录不会处于编辑模式,所以我不担心使用序列化会影响性能。

我知道如何将字符串拆分为字符串数组,并且我知道如何连接字符串数组以组成逗号分隔的列表。

我的困境围绕着在哪里进行拆分/加入?在控制器中作为显示之前/保存之前调用的私有方法,在模型中的某个位置,或者作为表单助手?我不知道。

建议将不胜感激。

4

1 回答 1

0

您无需将其转换为文本。ActiveRecord::Base Class 宏serialize是为这种用例构建的 -在文本列中保存数组、哈希和其他不可映射的对象

Active Record 可以使用 YAML 序列化文本列中的任何对象。为此,您必须通过调用类方法序列化来指定它。这使得在不做任何额外工作的情况下存储数组、散列和其他不可映射的对象成为可能。

class User < ActiveRecord::Base
  serialize :preferences
end

user = User.create(preferences: { "background" => "black", "display" => large })
User.find(user.id).preferences # => { "background" => "black", "display" => large }

文档:http ://api.rubyonrails.org/classes/ActiveRecord/Base.html 参见序列化部分

于 2013-08-24T03:49:19.890 回答