8
votes

Comment créer un modèle sans clé primaire dans les rails?

Je souhaite créer un modèle 'relation' qui s'étend sur Activerecord :: base, définissez le nom de la table comme «Questions_Tags» et sans clé primaire. Que dois-je faire? XXX

MISE À JOUR


Je sais utiliser "CREATE_TABLE" peut résoudre ce problème, mais c'est juste ce que Je veux savoir: quelle est la magie derrière create_table (: id => false) ? Comment puis-je obtenir le même effet sans utiliser Create_Table (: id => false) ?


3 commentaires

Selon moi, il n'y a pas de magie. Create_Table a une option supplémentaire, que l'ID -Column doit être créé. C'est tout. Lorsque vous demandez "la magie": voulez-vous dire le code, la déclaration SQL générée ou autre chose ...?


Si vous voulez savoir ce qui se passe dans les coulisses, je suggérerais de creuser Depper dans la documentation API Rails: API.RubyonRails.org/classes/acterecord/base.html , api.rubyonrails.org/classes/acterecord/migration.html , api.rubyonrails.org/classes/acterecord/associations/.../a>


@ Nathanvda, Auralbee: Merci les deux. Je suis nouveau dans les rails, peut-être que je dois lire plus d'articles sur ActiveRecord.


3 Réponses :


2
votes

Si vous cherchez à créer une table de pivot, à l'origine du nom de la table, AR vous gérera à l'arrière-plan.

Cependant, si vous cherchez à créer une table avec plus de feilds, alors: 1) renommer votre table à "Regents" s'il vous plaît 2) Utilisez une clé primaire "ID"

Il n'y a pas de bonne raison de ne pas utiliser une clé primaire dans une table, et il est très probable que vous vous retrouviez bien la regretter plus tard.


0 commentaires

-9
votes

Pourquoi ne voulez-vous pas un pk?

Enregistrement actif attend un PK, et je ne vois pas ce qui nuit à faire.


2 commentaires

Si vous créez des mappages de DB Legacy, c'est bien, mais les tables de jointure dans le modèle / design Activerecord ont des clés primaires. C'est une convention que vous pouvez suivre pour vous rendre la vie plus facile ou sur la lutte constante.


Il y a plusieurs fois que vous ne voudriez pas une clé primaire. Sur les tables de rapport où vous faites des tonnes d'insertions et de lis en fonction des colonnes à clé principale, vous pouvez vouloir aussi peu d'index que possible. Avoir une colonne de clé primaire que vous n'allez pas utiliser ne fait que des inserts lents.



13
votes

Créer une migration qui ressemble à ceci:

class CreateQuestionsTags < ActiveRecord::Migration

  def self.up
   create_table :questions_tags, {:id => false, :force => true} do |t|
     ...
     t.timestamps
   end
  end

  def self.down
   drop_table :questions_tags
  end

end


0 commentaires