Как я могу предотвратить Rails от "множественного числа" имени столбца? - PullRequest
1 голос
/ 12 марта 2010

Я использую плагин dwilkie иностранец для рельсов.У меня есть оператор создания таблицы, который выглядит следующим образом:

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

Однако, это генерирует следующий SQL:

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

Я хочу, чтобы столбцы назывались agent_id и game_id - не agents_id и games_id.Как я могу запретить Rails множественное число столбцов?


Я попробовал следующее в моем файле enviornment.rb, который не помог:

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

Ответы [ 3 ]

2 голосов
/ 12 марта 2010

Нашел решение моей проблемы. Мне приходилось объявлять внешние ключи отдельно от ссылок следующим образом:

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

С этим я мог бы достать вещи Инфлектора.

2 голосов
/ 12 марта 2010

В общем, не боритесь с соглашениями ActiveRecord, это часть того, что заставляет AR работать так хорошо. Однако, если для этого одного случая вы хотите сделать исключение, это легко сделать с помощью некоторого кода в вашем environment.rb, посмотрите http://api.rubyonrails.org/classes/Inflector/Inflections.html для примера.

0 голосов
/ 09 апреля 2016

Я думаю, вы получите то, что вы хотите, если вы будете использовать имя единственной модели в справочнике, например:

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

Это более понятный способ, отражающий, что в каждой строке вашей таблицы соединения будет один agent_id и один game_id, поэтому он будет ссылаться на одного агента в одной игре.

В этом случае дополнительные объявления перегиба или внешнего ключа не потребуются.

...