如何添加到序列化数组

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_messagesArray

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

【讨论】:

以上是关于如何添加到序列化数组的主要内容,如果未能解决你的问题,请参考以下文章

PHP如何将数据附加到序列化数组中

使用 SwiftyJSON 反序列化时如何添加对象数组

如何防止 JsonWriter 在序列化多维数组时添加太多换行符?

如何使用 PHP 序列化数组(数组到查询字符串)

如何让 webflux 端点用每个项目的对象名称序列化 json

如何在Node.js中检测键序列以执行某些操作