Pergunta

Eu estou usando de dwilkie estrangeiro plugin para trilhos. Eu tenho uma declaração a criação da tabela que se parece com:

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

No entanto, isso gera o seguinte SQL:

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

Eu quero que as colunas a ser chamado agent_id e game_id - não agents_id e games_id. Como posso evitar que Rails de pluralizar as colunas?


Eu tentei o seguinte no meu arquivo enviornment.rb, o que não ajuda:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.uncountable "agent_id", "game_id"
end
Foi útil?

Solução 2

encontrou a solução para o meu problema. Eu tinha que declarar chaves estrangeiras separadamente a partir de referências assim:

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

Com isso, eu poderia tirar o material Inflector.

Outras dicas

Em geral, não lute contra as convenções do Active Record, é parte do que faz o trabalho AR tão bem. No entanto, se para este um caso você quiser fazer uma exceção, é fácil o suficiente através de algum código em seu environment.rb, veja http://api.rubyonrails.org/classes/Inflector/Inflections.html para um exemplo.

Eu acho que você vai conseguir o que você quer se você usar o nome do modelo singular na referência, como este:

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 é uma maneira mais clara, refletindo que cada linha de sua tabela de junção terá um agent_id e um game_id, portanto, irá referenciar um agente com um jogo.

A inflexão adicional ou declarações de chave estrangeira não seria necessário neste caso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top