Подтвердить что ты не робот

TypeError: nil не является символом

Просто пытаясь сохранить с помощью 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, он не позволит мне e.save даже сразу после find_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'

Пожалуйста, помогите. Я потратил несколько часов на это. Я пробовал mysql insteal sqlite. Я пробовал разные типы данных столбцов. Вопрос - это поле "количество". Это не позволит мне экономить.

Изменить: переменная 'main' установлена ​​выше того, что показано.

4b9b3361

Ответ 1

Хорошо, я наконец нашел ответ. Я сделал таблицу соединений, "записи" без поля id. Это необходимо, если использовать таблицу соединений в качестве модели с дополнительными данными на ней.

Ответ 2

Для тех из вас, кто пришел сюда, и вам нужно добавить первичный ключ, вы можете сделать это при миграции следующим образом:

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