如何添加到序列化数组
Posted
技术标签:
【中文标题】如何添加到序列化数组【英文标题】:How to add to a serialized array 【发布时间】:2013-10-08 16:16:46 【问题描述】:我有一个具有序列化字段的现有用户,我希望能够将最近的消息添加到数组/序列化字段。
class User < ActiveRecord::Base
serialize :recent_messages
end
在我尝试过的控制器中
@user = current_user
@user.recent_messages << params[:message]
@user.save
但我收到以下错误:
NoMethodError (undefined method `<<' for nil:NilClass):
在我的架构中,我有:
create_table "users", :force => true do |t|
t.text "recent_messages"
end
关于我哪里出错了有什么想法吗?
【问题讨论】:
供参考:您可以查看***.com/questions/45066671/… 以构建在数组方面表现良好的表单 【参考方案1】:您也可以尝试以下代码:- 默认情况下,@user.recent_messages
将为 nil
@user.recent_messages ||= []
@user.recent_messages << params[:message]
@user.save
【讨论】:
【参考方案2】:您可以将课程传递给serialize
:
class User < ActiveRecord::Base
serialize :recent_messages, Array
end
以上确保recent_messages
是Array
:
User.new
#=> #<User id: nil, recent_messages: [], created_at: nil, updated_at: nil>
请注意,如果类型不匹配,您可能必须转换现有字段。
【讨论】:
【参考方案3】:这是因为当您第一次尝试将项目推送到您的 recent_messages
时,没有可以将项目推送到的数组(该字段默认为 nil
)。所以你必须先创建数组才能推送到它
@user = current_user
if @user.recent_messages.nil?
@user.recent_messages = [params[:message]]
else
@user.recent_messages << params[:message]
end
@user.save
【讨论】:
以上是关于如何添加到序列化数组的主要内容,如果未能解决你的问题,请参考以下文章
如何防止 JsonWriter 在序列化多维数组时添加太多换行符?