Search code examples
ruby-on-railsruby-on-rails-pluginsforeigner

How can I prevent Rails from "pluralizing" a column name?


I'm using dwilkie's foreigner plugin for rails. I have a table creation statement that looks like:

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

However, this generates the following SQL:

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

I want the columns to be called agent_id and game_id - not agents_id and games_id. How can I prevent Rails from pluralizing the columns?


I tried the following in my enviornment.rb file, which didn't help:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.uncountable "agent_id", "game_id"
end

Solution

  • Found the solution to my issue. I had to declare foreign keys separately from references like so:

    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
    

    With this, I could take out the Inflector stuff.