10

Ich sah mich um auf Stack-Überlauf und Agile Entwicklung mit Rails, konnte aber nichts finden, dass alle Teile dieser antwortete ich brauche.Falsche pluralizing von Modell in Rails

Ich habe gerade ein Kuhmodell in Schienen erstellt. Offenbar Rails verwendet eine veraltete Plural von Kuh („kine“), so dass, wenn ich das Modell erstellt, baute er eine Kine Migration:

class CreateKine < ActiveRecord::Migration 
    def change 
    create_table :kine do |t| 
     t.string :name 
     t.string :farm 
     t.string :breed 

     t.timestamps 
    end 
    end 
end 

Ich weiß, dass ich in das .rb Datei des Modells gehen könnte und set_table_name zurück zu Kuh, aber ich mache mir Sorgen um die zugehörigen Controller. Wenn ich einen Cows-Controller erstelle, wird er nicht synchronisiert?

Wie bekomme ich alles, um Kuh/Kühe zu sein? Vielen Dank. Dies ist eine meiner ersten Apps, und ich bin bereits verwirrt, wenn ich Controller-Model-Assoziationen verwalte, so dass dieses Inflektions-Problem nicht hilft.

+4

Diese eher obskuren unregelmäßigen Wende [von Rails vor ein paar Tagen entfernt] wurde (https://github.com/rails/rails/commit/c300dca9963bda78b8f358dbcb59cabcdc5e1dc9). Zukünftige Versionen werden Kuh als Kuh symbolisieren. –

+2

Gut zu hören. Obwohl das für alle, die eine Rails 4 App schreiben möchten, um die angelsächsische Viehzucht des 14. Jahrhunderts zu optimieren, für immer scheiße sein wird. – Sasha

Antwort

26

einen Wende erstellen hier ein Beispiel:

config> initializers> inflections.rb

ActiveSupport::Inflector.inflections do |inflect| 
    inflect.irregular 'cow', 'cows' 
end 
+0

Großartig. Und dann einfach Rake db laufen: migrieren wieder? – Sasha

+0

Oder sollte ich das Modell zurücksetzen und es dann erneut generieren? – Sasha

+3

Das ist die richtige Antwort. @Sasha, lösche einfach die Migration und führe den Generator erneut aus; Es sollte diesmal "Kühe" erzeugen. –

2

versuchen, die Tabelle zu umbenennen:

class RenameKineToCows< ActiveRecord:Migration 

    def up 
    rename_table :kine, :cows 
    end 
    def down 
    rename_table :cows, :kine 
    end 
end 

Benennen Sie Ihre App /models/kine.rb zu cow.rb und editiere die Datei

class Cow < ActiveRecord::Base 

    self.table_name = 'Cow' 
end 

Benennen Sie Ihre app/controllers/kine_controller.rb der Datei

class KineController < ApplicationController 

zu

class CowsController < ApplicationController 
cows_controller.rb und bearbeiten 10

und bearbeiten config/routes.rb

resources :kine 

zu

resources :cows 
+0

Vielen Dank! Einfach nochmal nachschauen. In der Migration hast du oben geschrieben, sollten self.up und self.down gleich sein? Oder sollte selbst sein.down "rename_table: Kühe,: kine"? – Sasha

+0

Ops, du hast Recht. Danke, dass du mich verbessert hast :) –