我有一个模型字段是一个数组。我可以存储它并从数据库中检索它没有任何问题。
当用户创建或编辑此数组时,我希望他们看到它并将其编辑为逗号分隔列表。我选择存储为数组并让用户与列表进行交互有明智的理由,而且他们很少编辑包含列表/数组的记录。 99%的时间他们只编辑该记录一次,当他们创建它时,虽然他们可能会多次查看,但这些查看时间记录将不会处于编辑模式,因此我不担心使用序列化会产生性能损失。
我知道如何将字符串拆分为字符串数组,我知道如何连接字符串数组以组成逗号分隔列表。
我的困境围绕在哪里进行拆分/加入?在控制器中作为私有方法在显示之前/保存之前调用,某些位于模型中,或者可能作为表单助手?我不知道。
建议将不胜感激。
答案 0 :(得分:0)
您无需将其转换为文字。 ActiveRecord :: Base Class宏serialize
是为这种用例而构建的 - 在文本列中保存数组,散列和其他不可映射的对象
Active Record可以使用YAML序列化文本列中的任何对象。为此,您必须通过调用类方法serialize来指定它。这使得存储数组,散列和其他不可映射的对象成为可能,而无需进行任何额外的工作。
class User < ActiveRecord::Base
serialize :preferences
end
user = User.create(preferences: { "background" => "black", "display" => large })
User.find(user.id).preferences # => { "background" => "black", "display" => large }
Doc:http://api.rubyonrails.org/classes/ActiveRecord/Base.html 请参阅序列化部分