Relaciones muchas a muchas en rieles no usan belongs_to
. En cambio, quieres usar una de las dos opciones. La primera es has_and_belongs_to_many
:
# app/models/category.rb
class Category < ActiveRecord::Base
has_and_belongs_to_many :items
end
# app/models/item.rb
class Item < ActiveRecord::Base
has_and_belongs_to_many :categories
end
por lo que deberá añadir una tabla de unión adicional en su base de datos, con una migración de esta manera:
class AddCategoriesItems < ActiveRecord::Migration
def self.up
create_table :categories_items, :id => false do |t|
t.integer :category_id
t.integer :item_id
end
end
def self.down
drop_table :categories_items
end
end
Puede verse que el nombre de la tabla de unión es la combinación de los nombres de las otras dos tablas. Las tablas se deben mencionar en orden alfabético como se indica arriba, y el :id => false
debe estar allí, ya que no queremos una clave principal en esta tabla. Rompe la asociación de los carriles.
También hay otro método más complejo conocido como has_many :through
si necesita almacenar información acerca de la relación en sí. He escrito un artículo completo que detalla cómo hacer ambos métodos, y cuándo utilizar cada uno:
Basic many-to-many Associations in Rails
espero que esto ayude, y ponerse en contacto conmigo si tiene alguna otra pregunta!
que fue realmente útil! Una adición útil sería algunos ejemplos sobre cómo podemos acceder a estas relaciones en el código (ya sea en un controlador o en una vista) gracias – msanjay