¿Cómo puedo evitar que los carriles de “pluralizar” un nombre de columna?
-
19-09-2019 - |
Pregunta
Estoy usando extranjero plug-in de dwilkie para los carriles. Tengo una declaración creación de la tabla que se parece 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
Sin embargo, esto genera el SQL siguiente:
[4;35;1mSQL (2.7ms)[0m [0mCREATE TABLE "agents_games" ("agents_id" integer NOT NULL, "games_id" integer NOT NULL) [0m
Quiero las columnas que se llaman agent_id
y game_id
- no agents_id
y games_id
. ¿Cómo puedo evitar que los carriles de la pluralización de las columnas?
He intentado lo siguiente en mi archivo enviornment.rb
, lo cual no ayuda:
ActiveSupport::Inflector.inflections do |inflect|
inflect.uncountable "agent_id", "game_id"
end
Solución 2
Se han encontrado la solución a mi problema. Tenía que declarar las claves externas por separado de referencias, así:
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 esto, pude sacar el material Inflector.
Otros consejos
En general, no luchar contra las convenciones de ActiveRecord, es parte de lo que hace el trabajo tan bien AR. Sin embargo, si para este un caso que desea hacer una excepción, que es bastante fácil a través de un cierto código en su environment.rb, echa un vistazo a http://api.rubyonrails.org/classes/Inflector/Inflections.html para un ejemplo.
Creo que obtendrá lo que desea si se utiliza el nombre del modelo singular en la referencia, así:
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
Esta es una forma más clara, lo que refleja que cada fila de la tabla de unión tendrá una id_agente y uno game_id, por tanto, hará referencia a un agente con un juego.
no serían necesariosLa inflexión adicional o extranjeras declaraciones clave en este caso.