我有一个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
那么对这个对象进行反序列化的正确方法是什么?
答案 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。