如何添加到序列化数组

gra*_*ury 35 ruby serialization ruby-on-rails

我有一个现有用户,它有一个序列化字段,我希望能够将最近的消息添加到数组/序列化字段.

class User < ActiveRecord::Base
 serialize :recent_messages
end
Run Code Online (Sandbox Code Playgroud)

在控制器中我试过了

@user = current_user
@user.recent_messages << params[:message]
@user.save
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

NoMethodError (undefined method `<<' for nil:NilClass):
Run Code Online (Sandbox Code Playgroud)

在我的架构中,我有:

create_table "users", :force => true do |t|
    t.text     "recent_messages"
  end
Run Code Online (Sandbox Code Playgroud)

关于我哪里出错的任何想法?

Ste*_*fan 57

您可以将课程传递给serialize:

class User < ActiveRecord::Base
  serialize :recent_messages, Array
end
Run Code Online (Sandbox Code Playgroud)

以上确保recent_messagesArray:

User.new
#=> #<User id: nil, recent_messages: [], created_at: nil, updated_at: nil>
Run Code Online (Sandbox Code Playgroud)

请注意,如果类型不匹配,您可能必须转换现有字段.

  • 如何在rails 5.x中做?它不适用于轨道5 (4认同)