没有id:to_json的ActiveRecord模型不起作用

时间:2017-08-05 19:08:49

标签: ruby-on-rails ruby activerecord relational-database

我有一个没有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而无需添加主键?

2 个答案:

答案 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