只要试着用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当我使用e.save时,即使在find_or_create_by之后,它也不允许我使用pry。
#<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'请任何帮助。我花了好几个小时在这上面。我试过mysql而不是sqlite。我尝试了不同的列数据类型。问题是领域“数量”。不会让我存钱的。
编辑:变量'main‘设置在显示的上面。
发布于 2014-10-26 02:10:44
好的,我终于找到了答案。我创建了join表,没有id字段的条目。如果使用join表作为一个具有额外数据的模型,这是必需的。
发布于 2017-01-28 03:17:12
对于那些来到这里并需要添加主键的人,您可以在这样的迁移中这样做:
class AddIdToMyTable < ActiveRecord::Migration def change add_column :my_table, :id, :primary_key end end
https://stackoverflow.com/questions/26568797
复制相似问题