我有一个没有id的模型(基于数据库视图)。 (我可以使用三个属性作为主键的关键组合,但rails不会让我这样做。)
当我在模型上运行.to_json
时,出现错误:
TypeError:
nil is not a symbol nor a string
# /Users/bjelline/.rvm/gems/ruby-2.3.3/gems/activemodel-4.0.13/lib/active_model/serialization.rb:109:in `block in serializable_hash'
展望serialization.rb
我发现了一个变量attribute_names
包含我的表中的属性,但也包含额外的值nil
:
attribute_names=["event_id", "course_id", "title", ..., "site_name", "allDay", nil]
这个零导致错误。我怀疑它是由桌子引起的 没有主键。
有没有办法修复.to_json
而无需添加主键?
答案 0 :(得分:1)
对于因nil is not a symbol nor a string
错误而正在阅读本文并且确实拥有ID字段的人:确保id字段是表的主键。
答案 1 :(得分:0)
无论根本原因(主键还是其他原因),attribute_names中的nil
都是问题所在。 attribute_names来自attributes
,可以覆盖。
属性返回一个哈希,其中键是属性的名称。在我的案例中,它包含nil => nil
。要删除密钥nil
,我可以使用except
,如下所示:
def attributes
super.except(nil)
end