Ruby on rails Rails:在Rails中将数组显示为字符串

Ruby on rails Rails:在Rails中将数组显示为字符串,ruby-on-rails,arrays,string,format,Ruby On Rails,Arrays,String,Format,我有一个模型字段,它是一个数组。我可以毫不费力地存储它并从数据库中检索它 当用户创建或编辑此数组时,我希望他们看到它并将其作为逗号分隔的列表进行编辑。在我选择存储为数组并让用户与列表交互的背后有一些合理的原因,另外,他们很少编辑包含列表/数组的记录。99%的情况下,他们在创建该记录时只编辑一次,尽管他们可能会多次查看该记录,但这些查看次数记录不会处于编辑模式,因此我不担心使用serialize会对性能造成影响 我知道如何将字符串拆分为字符串数组,我知道如何将字符串数组和字符串数组连接起来以组成逗

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

当用户创建或编辑此数组时,我希望他们看到它并将其作为逗号分隔的列表进行编辑。在我选择存储为数组并让用户与列表交互的背后有一些合理的原因,另外,他们很少编辑包含列表/数组的记录。99%的情况下,他们在创建该记录时只编辑一次,尽管他们可能会多次查看该记录,但这些查看次数记录不会处于编辑模式,因此我不担心使用serialize会对性能造成影响

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

我的难题是在哪里进行拆分/合并?在控制器中,作为显示前/保存前调用的私有方法,在模型中的某些位置,或者作为表单帮助器?我不知道


建议将不胜感激。

您无需将其转换为文本。ActiveRecord::基类宏serialize是为这样的用例而构建的—在文本列中保存数组、散列和其他不可映射的对象

活动记录可以使用YAML序列化文本列中的任何对象。为此,您必须通过调用类方法serialize来指定它。这使得存储数组、散列和其他不可映射的对象成为可能,而无需做任何额外的工作

class用户“黑色”,“显示”=>large})
User.find(User.id).preferences#=>{“背景”=>“黑色”,“显示”=>large}
文件:
请参见序列化部分

许多方法之一是在表示逗号分隔列表的模型中创建虚拟属性(
my_attr
)。当您获得属性(以表单显示它)时,模型中的代码(
def my_attr
)将执行连接。当在表单提交中设置属性时,模型中的代码(
def my_attr=
)会将列表拆分回一个数组,并将其分配给真实属性。
class User < ActiveRecord::Base
  serialize :preferences
end

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