Как я могу запретить Rails «множественное число» имени столбца?

StackOverflow https://stackoverflow.com/questions/2429516

Вопрос

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

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
Это было полезно?

Решение 2

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

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

Благодаря этому я мог бы убрать инфлектор.

Другие советы

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

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

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

Это более понятный способ, поскольку каждая строка вашей таблицы соединений будет иметь один идентификатор агента и один идентификатор игры, таким образом, будет ссылаться на одного агента с одной игрой.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top