如何防止Rails“复数”列名?

时间:2010-03-11 23:52:41

标签: ruby-on-rails ruby-on-rails-plugins foreigner

我正在使用dwilkie的foreigner插件用于rails。我有一个表创建语句,如下所示:

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_idgame_id - 而不是agents_idgames_id。如何防止Rails复数列?


我在我的enviornment.rb文件中尝试了以下操作,但没有帮助:

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

2 个答案:

答案 0 :(得分:2)

一般来说,不要与ActiveRecord的惯例作斗争,这是使AR工作得如此之好的部分原因。但是,如果对于这个一个案例你想要做一个例外,通过你的environment.rb中的一些代码很容易,请查看http://api.rubyonrails.org/classes/Inflector/Inflections.html作为例子。

答案 1 :(得分: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

有了这个,我可以拿出Inflector的东西。