Je veux créer puis mettre à jour ma sous-classe, mais après la création, elle perd sa clé primaire, ce qui rend toute mise à jour impossible.Rails ActiveRecord sous-classe perdre la clé primaire après créer
Ma configuration (simplifiée) est le suivant:
Rails 4.2.9
ruby-2.1.10
Modèles:
class Contact < ActiveRecord::Base
attr_accessible :firstname,
:lastname
end
class SimpleContact < Contact
self.primary_key = 'id'
end
Les deux modèles partagent la table contacts
(STI).
Controller:
module Public
class FilmEntriesController < PublicController
# ...
def create
logger.debug "SIM PK #{SimpleContact.primary_key}" # id
contact = SimpleContact.create()
logger.debug "SIM PK after create #{SimpleContact.primary_key}" # nil
contact.update_attributes({"firstname"=>"Moe", "lastname"=>"Test"})
end
end
Le tableau de contacts a été créé avec cette migration:
class CreateContacts < ActiveRecord::Migration
def change
create_table :contacts do |t|
t.string :firstname # | kontakt_vorname | varchar(64)
t.string :lastname # | kontakt_nachname | varchar(64)
t.timestamps
end
end
end
L'erreur complète msg est alors
ActiveRecord::StatementInvalid in Public::FilmEntriesController#create
Mysql2::Error: Unknown column 'contacts.' in 'where clause': UPDATE
`contacts` SET `firstname` = 'Moe', `lastname` = 'Test', `updated_at`
= '2017-09-07 11:09:39' WHERE `contacts`.`` = 21964
Merci pour toutes les notes!
Veuillez montrer une migration de base de données pour 'contacts'. – mudasobwa
Pourquoi définissez-vous 'primary_key' à' "id" '- n'est-ce pas la valeur par défaut? – Stefan
@mudasobwa: j'ai ajouté la migration à la question –