10

Miré a mi alrededor en Desbordamiento de pila y Desarrollo ágil con rieles, pero no pude encontrar nada que respondiera a todas las partes de esto que necesitaba.Pluralización incorrecta del modelo en rieles

Acabo de generar un modelo de Cow en los rieles. Al parecer, los carriles utiliza un plural anticuado de vaca ("vacas"), por lo que cuando creé ese modelo, se construyó una migración Kine:

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 

Sé que podría ir al archivo .rb del modelo y set_table_name de nuevo a vaca, pero me preocupan los controladores asociados. Si creo un controlador Cows, ¿no se sincronizará?

¿Cómo consigo que todo sea vacas/vacas? Gracias. Esta es una de mis primeras aplicaciones, y ya estoy bastante confundido al administrar asociaciones de modelos de controlador, por lo que este problema de inflexión no ayuda.

+4

Esta inflexión irregular y no se arcano [retirado de rieles hace unos días] (https://github.com/rails/rails/commit/c300dca9963bda78b8f358dbcb59cabcdc5e1dc9). Las versiones futuras inclinarán apropiadamente 'vaca' como' vacas'. –

+2

Bueno para escuchar. Aunque eso va a apestar para todos los que quieran escribir una aplicación de Rails 4 para optimizar el pastoreo de ganado anglosajón del siglo XIV. – Sasha

Respuesta

26

Crear una inflexión aquí es un ejemplo:

config> inicializadores> inflections.rb

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

Genial. Y luego simplemente ejecute rake db: migrar de nuevo? – Sasha

+0

¿O debería retrotraer el modelo y luego generarlo de nuevo? – Sasha

+3

Esta es la respuesta correcta. @Sasha, simplemente elimine la migración y vuelva a ejecutar el generador; debería generar 'Vacas' esta vez. –

2

intenta cambiar el nombre de la tabla:

class RenameKineToCows< ActiveRecord:Migration 

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

cambiar el nombre de la aplicación /models/kine.rb a cow.rb y edite el archivo

class Cow < ActiveRecord::Base 

    self.table_name = 'Cow' 
end 

Cambiar el nombre de su app/controllers/kine_controller.rb a cows_controller.rb y editar el archivo

class KineController < ApplicationController 

a

class CowsController < ApplicationController 

y editar config/routes.rb

resources :kine 

a

resources :cows 
+0

¡Muchas gracias! Solo comprobando dos veces. En la migración, escribiste arriba, ¿debería ser el mismo self.up y self.down el mismo? O debería ser uno mismo.ser "rename_table: vacas,: kine"? – Sasha

+0

Ops, tienes razón. Gracias por corregirme :) –

Cuestiones relacionadas