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
¿Fue útil?

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 necesarios

La inflexión adicional o extranjeras declaraciones clave en este caso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top