Domanda

straniero plug-in di dwilkie per le rotaie. Ho una dichiarazione di creazione tabella che assomiglia a:

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

Tuttavia, questo genera il seguente SQL:

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

Voglio le colonne per essere chiamati agent_id e game_id - non agents_id e games_id. Come posso evitare Rails da pluralizzare le colonne?


Ho provato quanto segue nel mio file enviornment.rb, che non ha aiutato:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.uncountable "agent_id", "game_id"
end
È stato utile?

Soluzione 2

Trovato la soluzione al mio problema. Ho dovuto dichiarare chiavi esterne separatamente dai riferimenti in questo modo:

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

Con questo, ho potuto prendere la roba inflettore.

Altri suggerimenti

In generale, non combattere le convenzioni di ActiveRecord, è parte di ciò che rende il lavoro AR così bene. Tuttavia, se per questo un caso si desidera fare un'eccezione, è abbastanza facile con un po 'di codice nel tuo environment.rb, controlla http://api.rubyonrails.org/classes/Inflector/Inflections.html per un esempio.

Credo che si otterrà ciò che si vuole, se si utilizza il nome del modello singolare nel riferimento, in questo modo:

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

Questo è un modo più chiaro, riflettendo che ciascuna riga della tabella join avrà uno agent_id e uno game_id, così farà riferimento un agente con un gioco.

Il flesso supplementare o stranieri dichiarazioni chiave non sarebbe necessario in questo caso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top