Question

J'utilise de dwilkie étranger plugin pour rails. J'ai une déclaration de création de la table qui ressemble à:

create_table "agents_games", :force => true, :id => false do |t|
  t.references :agents,     :column => :agent_id, :foreign_key => true, :null => false
  t.references :games,      :column => :game_id, :foreign_key => true, :null => false
end

Cependant, cela génère l'instruction SQL suivante:

[4;35;1mSQL (2.7ms)[0m [0mCREATE TABLE "agents_games" ("agents_id" integer NOT NULL, "games_id" integer NOT NULL) [0m

Je veux que les colonnes à appeler agent_id et game_id - pas agents_id et games_id. Comment puis-je empêcher Rails de pluralisation les colonnes?


J'ai essayé ce qui suit dans mon dossier de enviornment.rb, qui n'a pas aidé:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.uncountable "agent_id", "game_id"
end
Était-ce utile?

La solution 2

trouvé la solution à mon problème. Je devais déclarer séparément les clés étrangères des références comme ceci:

create_table "agents_games", :force => true, :id => false do |t|
  t.references :agent
  t.foreign_key :agents,     :column => :agent_id, :null => false
  t.references :game
  t.foreign_key :games,      :column => :game_id, :null => false
end

Avec cela, je pouvais prendre les choses inflector.

Autres conseils

En général, ne se battent pas les conventions de ActiveRecord, il fait partie de ce qui rend le travail de AR si bien. Toutefois, si pour cette un cas vous voulez faire une exception, il est assez facile par un code dans votre environment.rb, consultez http://api.rubyonrails.org/classes/Inflector/Inflections.html pour un exemple.

Je pense que vous obtiendrez ce que vous voulez si vous utilisez le nom du modèle singulier dans la référence, comme ceci:

create_table "agents_games", :force => true, :id => false do |t|
  t.references :agent,     :foreign_key => true, :null => false
  t.references :game,      :foreign_key => true, :null => false
end

Ceci est une façon plus claire, ce qui reflète que chaque ligne de votre table de jointure aura une agent_id et un game_id, ainsi fera référence à un agent avec un jeu.

L'inflexion supplémentaire ou déclarations clés étrangères ne seraient pas nécessaires dans ce cas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top