regresar rails migraciones migracion hacer eliminar deshacer crear comando columna ruby-on-rails

ruby-on-rails - eliminar - hacer migraciones en rails



¿Debo crear manualmente una migración para una tabla de unión HABTM? (4)

Estoy luchando ahora para que HATBM funcione correctamente. Tengo un scanario golpeado: artículos y etiquetas. Supongo que HABTM debería usarse aquí, ya que es una relación de muchos a muchos. No obstante, no sé si debería crear manualmente una tabla de unión (articles_tags en este caso).

Mi código actualmente es el siguiente:

class Article < ActiveRecord::Base has_and_belongs_to_many :tags end class Tag < ActiveRecord::Base has_and_belongs_to_many :articles end

Cuando ejecuto las migraciones, no se crea una tercera tabla. Además, me gustaría añadir que mi tercera tabla no tiene ninguna lógica de dominio, solo asignación ciega.

Estoy usando Rails 2.2.2


Debería hacer esto en una migración de una de las tablas, o en una migración separada si esas migraciones se han ejecutado:

create_table :articles_tags, :id => false do |t| t.references :article, :tag end add_index :articles_tags, [:article_id, :tag_id]

Esto creará la tabla para usted y :id => false le dice a Rails que no agregue un campo de id a esta tabla. También hay un índice que acelerará las búsquedas de esta tabla de unión.

También puede generar un modelo (ArticlesTag) para esto y hacer:

# article.rb has_many :articles_tags has_many :tags, :through => :articles_tags # tag.rb has_many :articles_tags has_many :articles, :through => :articles_tags # article_tag.rb belongs_to :tag belongs_to :article

Y luego cree la tabla en la migración generada a partir de la script/generate model articles_tag call.



Probablemente también desee agregar un índice a la migración:

add_index "articles_tags", "article_id"

add_index "articles_tags", "tag_id"

Sin embargo, si desea la funcionalidad de etiquetado, le recomiendo el plugin acts_as_taggable_on rails:

http://www.intridea.com/tag/acts_as_taggable_on http://github.com/mbleigh/acts-as-taggable-on/

Lo he usado en un proyecto y fue muy fácil de implementar.

Uno de los problemas con una tabla de combinación para etiquetar es que puede ponerse feo creando una tabla de unión para cada tipo de contenido que desea que se pueda etiquetar (es decir, etiquetas_de_comentarios, etiquetas_de_descripciones, etiquetas_de_imágenes, etc.). Este complemento utiliza una tabla de etiquetas que incluye un discriminador para determinar el tipo de contenido sin la necesidad de una tabla de unión específica para cada tipo.