Wie kann ich verhindern, dass Rails von „pluralizing“ einen Spaltennamen?
-
19-09-2019 - |
Frage
Ich bin mit dwilkie Ausländer Plugin für Schienen. Ich habe eine Tabelle Schöpfung Aussage, dass aussieht wie:
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
Dies ist jedoch generiert die folgende SQL:
[4;35;1mSQL (2.7ms)[0m [0mCREATE TABLE "agents_games" ("agents_id" integer NOT NULL, "games_id" integer NOT NULL) [0m
Ich möchte die Spalten agent_id
und game_id
genannt werden - nicht agents_id
und games_id
. Wie kann ich verhindern, dass Rails die Spalten von pluralizing?
Ich habe versucht, die folgend in meiner enviornment.rb
Datei, die nicht geholfen haben:
ActiveSupport::Inflector.inflections do |inflect|
inflect.uncountable "agent_id", "game_id"
end
Lösung 2
Gefunden die Lösung für mein Problem. Ich hatte von Referenzen Fremdschlüssel separat zu erklären, wie 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
Damit konnte ich die Beugung Sachen herausnehmen.
Andere Tipps
In der Regel kämpfen nicht Active Konventionen, es ist Teil dessen, was Arbeit AR macht so gut. wenn dies jedoch ein Fall Sie wollen eine Ausnahme machen, sie über einige Code in Ihre environment.rb leicht genug ist, überprüfen http://api.rubyonrails.org/classes/Inflector/Inflections.html für ein Beispiel.
Ich denke, Sie bekommen, was Sie wollen, wenn Sie die einzigartigen Modellnamen in der Referenz verwenden, wie diese:
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
Dies ist ein klarer Weg, zu bedenken, daß jede Zeile der Join-Tabelle ein agent_id und ein game_id haben wird, also ein Mittel mit einem Spiel Referenz wird.
Die zusätzliche Flexion oder Fremdschlüssel Erklärungen würde in diesem Fall nicht erforderlich.