反序列化rails数据库数组

时间:2014-02-02 23:15:33

标签: ruby-on-rails activerecord ruby-on-rails-3.2 ruby-on-rails-4

我有一个User class的序列化对象数组:

  serialize :members, Array

以下是其列在数据库中的显示方式

---
- '1'
- '2'
- !ruby/object:User
  attributes:
    id: 18
    username: bulk7
    email: !ruby/string:Spreadsheet::Link
    admin: false
    locked: false
    slug: bulk7
- !ruby/object:User
  attributes:
    id: 19
    username: bulk8
    email: !ruby/string:Spreadsheet::Link
    admin: false
    locked: false
    slug: bulk8

我需要遍历每个数组元素并从我的视图中获取一些信息:

<ul class="list-group">
    <% @user.company.members.each do |m| %>
  <li class="list-group-item"><%= m.username%></li>
    <% end %>
</ul>
</div>

但是没有得到正确的值我得到了这个错误:

undefined method `username' for "1":String

那么对这个对象进行反序列化的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

看起来你在那里有一些杂散的数据,这些数据很糟糕。插入块中的第一件事是&#39; 1&#39;,然后当调用&#39; 1&#39; .username时,您的错误将被抛出。您可以跳过不是用户的任何内容来回避此问题:

<ul class="list-group">
  <% @user.company.members.each do |m| %>
    <% break unless m.class == User %>
    <li class="list-group-item"><%= m.username %></li>
  <% end %>
</ul>

但这是一个非常难看的解决方案,你应该弄清楚为什么你首先会有污染数据的杂散数据。我认为您实际可能要做的是使用has_many / belongs_to关联将用户绑定到公司。 rails不是使用序列化,而是可以为您处理所有的gruntwork。