through relaciones references rails polimorficas modelos has_one has_and_belongs_to_many asociaciones ruby-on-rails ruby-on-rails-4 associations

ruby-on-rails - relaciones - rails references



¿Cómo hacer has_many y has_one asociación en el mismo modelo? (5)

Necesito hacer dos asociaciones en el mismo modelo. Dónde:

Team has_many User Now, quiero que Team has_one Líder

Este "Líder" será un Usuario

Estoy tratando de usar has_one throught pero creo que la asociación no funciona.

Leader.rb

class Leader < ActiveRecord::Base belongs_to :user belongs_to :team

Team.rb

class Team < ActiveRecord::Base has_one :user, through: :leader end

User.rb

class User < ActiveRecord::Base belongs_to :team has_one :captain end

y el error de seguimiento alrededor de la línea 27:

NoMethodError in TeamsController#create 26 def create **27 @team = current_user.teams.create(team_params)** 28 @team.save 29 respond_with(@team) 30 current_user.update(team_id: @team.id)


Team has_many User Now, quiero que Team tenga_un Líder

Este "Líder" será un Usuario

Usar herencia (también llamado subclasificación), Líder es un usuario.

class User < ActiveRecord::Base belongs_to :team end class Leader < User end class Team < ActiveRecord::Base has_many :users has_one :leader end

Tu tabla de usuarios también es importante. Asegúrese de que los usuarios tengan t.belongs_to :team y t.string :type su método create_table. Tenga en cuenta que un Líder es un Usuario y no necesita una tabla separada, sin embargo, debe permitir que ActiveRecord registre su tipo para que pueda devolver el Modelo correcto más adelante.

Referencias

inheritance específicamente necesita ''herencia de mesa única''

belongs_to desplácese hacia abajo para has_one y has_many, las tres relaciones utilizadas aquí.


¿Qué hay de la configuración de un indicador boolean en la tabla de usuarios llamado leader ? Y luego tu asociación puede convertirse en:

class Team < ActiveRecord::Base has_many :users has_one :leader, class_name: ''User'', -> { where leader: true } end


En este caso creo que necesitas 2 modelos son suficientes

1). Modelo de usuario

class User < ActiveRecord::Base belongs_to :team end

2). Modelo de equipo

class Team < ActiveRecord::Base has_many :users belongs_to :leader, class_name: ''User'', foreign_key: :leader_id end


Tienes has_one asociación entre el user y el team . Prueba esto:

current_user.create_team(team_params)

Además, debe agregar una adecuada asociación de respaldo de team a leader .

class Team < ActiveRecord::Base belongs_to :leader has_one :user, through: :leader end


current_user.teams.create(team_params)

Equipos es para una asociación has_many , quieres current_user.create_team(team_params)