2010-06-21 15 views
6

Quiero crear un modelo 'Relación' que extienda ActiveRecord :: Base, establezca su nombre de tabla como 'questions_tags', y sin clave principal. ¿Que debería hacer?Cómo crear un modelo sin clave principal en rieles

class Relation < ActiveRecord::Base 
    set_table_name 'questions_tags' # set table name, right? 

    # how to define 'no-pk'? 

end 

ACTUALIZACIÓN


Hola, chicos. Sé que usar 'create_table' puede resolver este problema, pero esto es justo lo que quiero saber: ¿Cuál es la magia detrás de create_table(:id=>false)? ¿Cómo puedo obtener el mismo efecto sin usar create_table(:id=>false)?

+1

Según mi no hay magia. 'create_table' tiene una opción adicional, ya sea que se haya creado o no la columna' id'. Eso es todo. Cuando estás pidiendo "la magia": ¿te refieres al código, la declaración sql que se genera, o algo más ...? – nathanvda

+1

Si quieres saber lo que está sucediendo detrás de escena, te sugiero que cantes depper en la documentación de la API Rails: http://api.rubyonrails.org/classes/ActiveRecord/Base.html, http: // api .rubyonrails.org/classes/ActiveRecord/Migration.html, http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html – auralbee

+0

@ nathanvda, auralbee: gracias a los dos. Soy nuevo en rails, tal vez necesito leer más artículos sobre ActiveRecord. – Freewind

Respuesta

8

Crear una migración que tiene este aspecto:

class CreateQuestionsTags < ActiveRecord::Migration 

    def self.up 
    create_table :questions_tags, {:id => false, :force => true} do |t| 
    ... 
    t.timestamps 
    end 
    end 

    def self.down 
    drop_table :questions_tags 
    end 

end 
+0

gracias por su respuesta. Por favor mira mi pregunta actualizada – Freewind

1

Si está buscando crear una tabla dinámica, como se ve desde el nombre de la tabla, entonces AR se encargará de eso en segundo plano.

Sin embargo, si usted está mirando para crear una tabla con más feilds entonces: 1) cambiar el nombre de la tabla para "realtions" por favor 2) utilizan una clave primaria "id"

No hay una buena razón para no estar usando una clave principal en una tabla, y es muy probable que puedas lamentarte más tarde.

+0

gracias. Por favor, vea mi pregunta actualizada, solo quiero saber qué pasó detrás. – Freewind

-7

¿Por qué no quieres un PK?

Active Record espera un PK, y no veo qué daño puede hacer.

+0

gracias. Debido a que es una tabla de unión, no quiero que tenga un PK – Freewind

+3

si está creando asignaciones de bases de datos heredadas, está bien, pero las tablas de unión en el diseño/patrón de ActiveRecord tienen claves primarias. Es una convención que puedes seguir para facilitar tu vida o para luchar constantemente contra ella. – nessur

+3

Hay muchas veces que no querría una clave principal. En las tablas de informes en las que realiza toneladas de inserciones y lecturas basadas en columnas que no son de clave principal, es posible que desee el menor número de índices posible. Tener una columna de clave principal que no vas a usar no hace más que inserciones lentas. – WattsInABox

Cuestiones relacionadas