TypeError:nil不是符号

时间:2014-10-26 00:59:12

标签: mysql ruby-on-rails ruby activerecord

只需尝试使用ActiveRecord进行保存即可获得" TypeError:nil不是符号"

if card_data[:card] and card_data[:deck]
  e = self.find_or_create_by(card_id: card_data[:card].id, deck_id: card_data[:deck].id, main: main)
  e.card = card_data[:card]
  e.deck = card_data[:deck]
  e.quantity = card_data[:quantity].to_i
  e.main = main
  p e
  e.save if e.card and e.deck
end

我运行上面的代码。

架构:

create_table "entries", id: false, force: true do |t|
  t.integer  "card_id"
  t.integer  "deck_id"
  t.integer  "quantity",   default: 0, null: false
  t.integer  "main",       default: 0, null: false
  t.datetime "created_at"
  t.datetime "updated_at"
end

当我使用pry时,在找到_or_create_by之后,它甚至不会立即让我保存。

#<Entry card_id: 1, deck_id: 1, quantity: 4, main: 1, created_at: "2014-10-26 00:45:12", updated_at: "2014-10-26 00:45:12">
(0.2ms)  BEGIN
(0.2ms)  ROLLBACK
TypeError: nil is not a symbol
from /home/kevin/.rvm/gems/ruby-2.1.2/gems/activemodel-4.1.6/lib/active_model/dirty.rb:162:in `attribute_was'

请任何帮助。我在这上花了好几个小时。我试过sqlite的mysql insteal。我尝试了不同的列数据类型。问题是字段数量&#39;。它不会让我拯救。

编辑:变量&#39; main&#39;设置在显示的上方。

2 个答案:

答案 0 :(得分:29)

好的,我终于找到了答案。我制作了联接表,&#39;条目&#39;没有id字段。如果将连接表用作具有额外数​​据的模型,则需要这样做。

答案 1 :(得分:1)

对于那些来到这里并且需要添加主键的人,您可以在这样的迁移中执行此操作:

class AddIdToMyTable < ActiveRecord::Migration def change add_column :my_table, :id, :primary_key end end