Pregunta

I estaba previamente usando has_and_belongs_to_many, y se han convertido al has_many: a través. Así es como se ve una lista de juegos que pueden tener muchos usuarios jugar. Con esto, puedo hacer game.users y user.games ....:

class Game < ActiveRecord::Base
 has_many :game_users, :dependent => :destroy
 has_many :users, :through => :game_users, :uniq => true
end

class User < ActiveRecord::Base
 has_many :game_users, :dependent => :destroy
 has_many :games, :through => :game_users, :uniq => true
end

class GameUser < ActiveRecord::Base
  belongs_to :game
  belongs_to :user
end

Y mi migración de base de datos para la tabla de unión:

create_table :game_users, :id => false do |t|
      t.column :game_id, :integer
      t.column :user_id, :integer
      t.column :player_index, :integer
    end

No estoy muy seguro de conseguir todo esto, por favor, ayúdame a comprobar mis datos:

  1. Es el dependiente =>: destruir correcta? Quiero unirse a los '' game_users entrada de la tabla a ser borrado si bien el juego o el usuario se destruye? -, pero no quiero que los usuarios pueden eliminar si se eliminan los juegos y viceversa .....

  2. El campo uniq se supone que decir que los juegos contienen sólo usuarios únicos, y los usuarios sólo contienen juegos únicos. ¿Es correcto?

  3. La migración de base de datos como antes tiene: id => false. ¿Sigue siendo lo que hay que hacer? Probé en la consola de la destrucción de un juego, y tengo quejas sobre la falta de identificación ... así que supongo que no, y tratar de entender por qué.

Me parece rieles asociaciones de registro activos muy confuso. Supongo que no se supone que son!

¿Fue útil?

Solución

1: Sí, eso es correcto

2: Desde el en uniq :

  

Si es verdad, se omitirán los duplicados   de la colección. Útil en   conjunción con:. través

Así que, sí, si tu objetivo no es conseguir el mismo juego en los juegos de la colección del usuario ni el mismo usuario en usuarios de recolección de juego, eso es correcto. Todo se explica rel="noreferrer"> href="http://blog.hasmanythrough.com/2006/5/6/through-gets-uniq" .

Será, sin embargo, evitar que GameUsers duplicados que se creen. Por eso, que había necesidad de usar validates_ singularidad _of en el GameUser-modelo :

class GameUser < ActiveRecord::Base
  validates_uniqueness_of :game_id, :scope => :user_id
end

3: No, usted no desea utilizar: id => false más. Por el cambio de has_and_belongs_to_many a has_many: a través, que ha promovido su muchos-a-muchos unirse a la mesa a un modelo completo - GameUser - que requiere su propio id

.

A pesar de que es viejo, este sigue siendo un buen artículo para comprensión has_many:. a través

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top