Рельсы update_attributes пытающийся вставить идентификационную колонку

У меня есть модель:

class MyModel < ActiveRecord::Base
  has_many :other_things
  accepts_nested_attributes_for :other_things
  attr_accessible :other_things_attributes
end

class OtherThing < ActiveRecord::Base
  belongs_to :my_model
  attr_accessible :foo
end

Пробуя к update_attributes на случае MyModel, Rails/ActiveRecord пытается вставить пустой указатель в идентификационную колонку:

my_instance = MyModel.first
my_instance.update_attributes({
  "other_things_attributes"=> {
    "1357758179583" => {"foo"=>"bar", "_destroy"=>"false"},
    "1357758184445" => {"foo"=>"thing", "_destroy"=>"false"}
  }
})

Это терпит неудачу, с:

  SQL (0.5ms)  INSERT INTO "other_things" ("created_at", "my_model_id", "id", "updated_at", "foo") VALUES ($1, $2, $3, $4, $5)  [["created_at", Wed, 09 Jan 2013 14:30:33 EST -05:00], ["my_model_id", 8761], ["id", nil], ["updated_at", Wed, 09 Jan 2013 14:30:33 EST -05:00], ["foo", "bar"]]
   (0.1ms)  ROLLBACK 
ActiveRecord::StatementInvalid: PGError: ERROR:  null value in column "id" violates not-null constraint
: INSERT INTO "other_things" ("created_at", "my_model_id", "id", "updated_at", "foo") VALUES ($1, $2, $3, $4, $5)

Схема, показывающая other_things:

  create_table "other_things", :force => true do |t|
    t.string   "foo"
    t.integer  "my_model_id"
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
  end

То, что это не показывает, является ограничением первичного ключа (или lackthereof), который был основной проблемой.

1
Обновленный, чтобы показать требуемую информацию; также отвеченный вопрос с недавно обнаруженной основной проблемой недостающего ограничения первичного ключа.
добавлено автор pcragone, источник
Обновленный, чтобы показать требуемую информацию; также отвеченный вопрос с недавно обнаруженной основной проблемой недостающего ограничения первичного ключа.
добавлено автор pcragone, источник
Можете вы отправлять здесь часть db/ scheme.rb показ other_things схема стола?
добавлено автор daniloisr, источник

5 ответы

Это было вызвано, так или иначе теряя спецификацию первичного ключа на other_things столе. Я определил это, потому что я должен был отделить случаи (организация и производство), где это работало в одном, но не другом; после сравнения кода и Связанных с рельсами проблем, я решил к разности схемы DB, которые показали мне недостающее ограничение первичного ключа. Очевидно, Рельсы использует первичные ключи, чтобы определить надлежащую колонку; интуитивно очевидный, но не, если вы уже не знаете это, по-моему. Спасибо за комментарии!

ALTER TABLE ONLY other_things ADD CONSTRAINT other_things_pkey PRIMARY KEY (id);
1
добавлено

Это было вызвано, так или иначе теряя спецификацию первичного ключа на other_things столе. Я определил это, потому что я должен был отделить случаи (организация и производство), где это работало в одном, но не другом; после сравнения кода и Связанных с рельсами проблем, я решил к разности схемы DB, которые показали мне недостающее ограничение первичного ключа. Очевидно, Рельсы использует первичные ключи, чтобы определить надлежащую колонку; интуитивно очевидный, но не, если вы уже не знаете это, по-моему. Спасибо за комментарии!

ALTER TABLE ONLY other_things ADD CONSTRAINT other_things_pkey PRIMARY KEY (id);
1
добавлено

Имел подобную проблему, которую я решил при помощи update_columns вместо update_attributes. Надеюсь, что это поможет кому-то.:)

0
добавлено

Имел подобную проблему, которую я решил при помощи update_columns вместо update_attributes. Надеюсь, что это поможет кому-то.:)

0
добавлено

Имел подобную проблему, которую я решил при помощи update_columns вместо update_attributes. Надеюсь, что это поможет кому-то.:)

0
добавлено
pro.ruby
pro.ruby
1 181 участник(ов)

Язык программирования Ruby Additional docs: https://rubyreferences.github.io/rubyref/ Invite: https://telegram.me/joinchat/Be4rsT2NuB3CyJaF26j1kA Кто хочет компилировать: @crystal_ru (его синтаксис основан на Ruby) Участник @proDOT

Ruby, Rails, Hanami | dry-rb
Ruby, Rails, Hanami | dry-rb
1 180 участник(ов)

https://telegram.me/rubyjob - Ruby Job По вопросам - @eugene_shved

Ruby School .us
Ruby School .us
1 045 участник(ов)

Чат-болталка для учеников руби-школы и не только. Правила: https://telegra.ph/Pravila-chata-Rubi-shkoly-03-13

SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

Random Ruby Chat
Random Ruby Chat
589 участник(ов)

Правила публикации вакансий: https://t.me/codenamecrud/60865

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)

Rubyata
Rubyata
333 участник(ов)

Коммюнити Ruby и Ruby On Rails Флуд не приветствуются. Вакансии можно публиковать только и ТОЛЬКО по пятницам с хештегом #вакансия.

Ruby Talks
Ruby Talks
236 участник(ов)

Национальная Флеймотека

RubyRush
RubyRush
189 участник(ов)

rubyrush.ru программирование для самых новичков

Rails Chat
Rails Chat
87 участник(ов)

You are welcome to discuss Ruby On Rails development process and other stuff