rails name many join_table has_and_belongs_to_many has example belongs and ruby-on-rails has-and-belongs-to-many relationship

ruby-on-rails - name - rails has and belongs to many example



Agregar registro a una relación has_and_belongs_to_many (3)

Esto tambien es util

User.promotion.build(attr = {})

así, el objeto de promoción se guarda, cuando se guarda el objeto de usuario.

Y esto es

User.promotion.create(attr = {})

Crea promociones que no necesitas guardar ni modelo de usuario.

Tengo dos modelos, usuarios y promociones. La idea es que una promoción puede tener muchos usuarios, y un usuario puede tener muchas promociones.

class User < ActiveRecord::Base has_and_belongs_to_many :promotions end class Promotion < ActiveRecord::Base has_and_belongs_to_many :users end

También tengo una tabla / modelo de promociones_usuarios, sin identificación propia. Hace referencia a user_id y promotions_id.

class PromotionsUsers < ActiveRecord::Base end

Entonces, ¿cómo agrego un usuario a una promoción? He intentado algo como esto:

user = User.find(params[:id]) promotion = Promotion.find(params[:promo_id]) promo = user.promotions.new(promo)

Esto resulta en el siguiente error:

NoMethodError: undefined method `stringify_keys!'' for #<Promotion:0x10514d420>

Si intento esta línea en su lugar: promo = user.promotions.new (promo.id)

Me sale este error:

TypeError: can''t dup Fixnum

Estoy seguro de que hay una solución muy fácil para mi problema, y ​​simplemente no estoy buscando la solución de la manera correcta.


Puedes hacer solo

User.promotions = promotion #notice that this will delete any existing promotions

o

User.promotions << promotion

Puede leer sobre la relación has_and_belongs_to_many here .


user = User.find(params[:id]) promotion = Promotion.find(params[:promo_id]) user.promotions << promotion

user.promotions es una matriz de las promociones vinculadas al usuario.

Vea el apidock para todas las diferentes funciones que tiene disponibles.