ruby-on-rails - many - rails has_one through
Rieles(ActiveRecord) muchos a muchos tabla (3)
Tengo dos modelos, usuarios y grupos. Cada grupo puede tener muchos usuarios y cada usuario puede estar en muchos grupos.
Actualmente tengo algo simple como:
Usuario:
has_many :groups
Grupo:
has_many :users
Así que tengo una tabla groups_users que solo está creando filas con group_id y user_id. Quiero agregar otra columna a esto, (que tengo), la pregunta es ¿cómo puedo acceder a ella desde un modelo sin usar una llamada SQL personalizada? En el modelo de grupo puedo ir a self.users y en user puedo ir self.groups
¿Hay alguna manera de cambiar la tercera columna de esta tabla de un modelo de usuario?
Perdón si esto es confuso, por favor asesórate sobre esto
users_groups
otra columna a [users_groups
] ... La pregunta es ¿cómo puedo acceder a ella desde un modelo sin usar una llamada SQL personalizada?
Parece que desea acceder a una columna de su tabla user_groups
llamando a un método en su modelo de User
o su modelo de Group
.
Algunas sugerencias:
Yo user_groups
la tabla " user_groups
" para trabajar con las expectativas de pluralización de ActiveRecord, pero no estoy seguro de si eso es esencial.
Siguiendo el consejo de Dave, querrás configurar las cosas usando la técnica " has_many :through
" ...
# Declare a Model based on the many-to-many linking table.
class UserGroup < ActiveRecord::Base
belongs_to :user
belongs_to :group
end
class User < ActiveRecord::Base
has_many :user_groups
has_many :groups, :through => :user_groups
end
class Group < ActiveRecord::Base
has_many :user_groups
has_many :users, :through => :user_groups
end
¿Hay alguna manera de cambiar la tercera columna de esta tabla de un modelo de usuario?
Esto no está claro, pero tenga en cuenta que cada User
puede tener muchos UserGroups
. Entonces, si quisieras cambiar esa tercera columna, tendrías que encontrar la particular que estás buscando.
Aquí hay un par de tutoriales que deberían ayudar. Básicamente existen dos enfoques para hacer que funcione de muchos a muchos, ya sea has_and_belongs_to_many o has_many: through (recommended).
campo de golf:
En Rails 3 desea hacer una tabla de unión para muchas relaciones, usando los nombres en plural de las tablas que desea unir en orden alfabético. Entonces, en este caso, sería groups_users
.
modelos
class GroupsUser < ActiveRecord::Base
belongs_to :user
belongs_to :group
end
class User < ActiveRecord::Base
has_many :groups_users
has_many :groups, :through => :groups_users
end
class Group < ActiveRecord::Base
has_many :groups_users
has_many :users, :through => :groups_users
end